gpt4 book ai didi

json - Rail 4 为 POST、PUT、DELETE JSON 请求设计 nil current_user

转载 作者:行者123 更新时间:2023-12-01 01:35:04 25 4
gpt4 key购买 nike

下面是 ApplicationController 和 OrdersController 的代码。

当 POST 请求创建新订单时,我在 login_required 中得到 current_user nil 并停止了过滤器链。

********** Request Format: [application/json] - current_user:[] - user_signed_in: [false]
14:30:26 web.1 | Filter chain halted as :login_required rendered or redirected
14:30:26 web.1 | Completed 401 Unauthorized in 19ms (Views: 0.3ms)

使用设计 database_authentication。不想使用 token_authentication。建议需要如何为 POST/PUT JSON 请求获取 current_user。

  • ruby :2.1.1
  • 导轨:4
  • 设计:3.2.4
  • 典狱长:1.2.3

应用程序 Controller :

  class ApplicationController < ActionController::Base

# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery
# with: :null_session

before_filter :configure_permitted_parameters, if: :devise_controller?

def login_required
logger.info("********** Request Format: [#{request.format}] - current_user:[#{current_user}] - user_signed_in: [#{user_signed_in?}]")
if request.format == :html
authenticate_user!
return
end

unless current_user
is_validated = false
respond_to do |format|
format.json { render :json => is_validated,
:status => :unauthorized}
format.protobuf { render :text => ProtoHelper.to_session_proto(is_validated),
:status => :unauthorized}
end
end
end
end

class OrdersController < ApplicationController
before_filter :login_required

# POST /orders.json
# POST /orders.protobuf
def create
end
end

最佳答案

发现问题出在用户登录后设计清除 session[_csrf_token]。这使得 rails protect_from_forgery 调用抛出警告消息:“无法验证 CSRF token"在日志中并且无法在 session 中找到用户。

解决方法:

config/initializers/devise.rb 中:

将配置变量:clean_up_csrf_token_on_authentication 设置为 false,默认情况下,devise 将此设置设置为 true。

config.clean_up_csrf_token_on_authentication = false

关于json - Rail 4 为 POST、PUT、DELETE JSON 请求设计 nil current_user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com