Api 从Desive重写SessionController时管理员身份验证失败

Api 从Desive重写SessionController时管理员身份验证失败,api,session,ruby-on-rails-4,devise,warden,Api,Session,Ruby On Rails 4,Devise,Warden,我一直在尝试用Angular实现SPA,用Rails 4实现API。我决定使用一个会话控制器来继承用于API的Desive会话控制器,并使用warden进行基于机架的身份验证。设计工作良好,直到我登录,它重定向到仪表板页面成功,但在API命名空间会话控制器,我无法与管理员验证 class Api::SessionsController < Devise::SessionsController before_action :warden_authenticate def create

我一直在尝试用Angular实现SPA,用Rails 4实现API。我决定使用一个会话控制器来继承用于API的Desive会话控制器,并使用warden进行基于机架的身份验证。设计工作良好,直到我登录,它重定向到仪表板页面成功,但在API命名空间会话控制器,我无法与管理员验证

class Api::SessionsController < Devise::SessionsController
before_action :warden_authenticate

def create
  sign_in(resource_name, resource)
  resource.create_authentication_token!
  render json: {authenticate_token: resource.authenticate_token}
end

def destroy
  sign_out(resource_name)
  resource.clear_authentication_token!
  render nothing:true
end

private

def warden_authenticate
  self.resource = warden.authenticate!(auth_options)
end
end
它抱怨csrf,在此之前,我用基地控制器进行了修复

protect_from_forgery with: :null_session, if: Proc.new { |c|     c.request.format.include? 'application/json' }

我做错什么了吗?我在会后检查了一下典狱长是否在中间件列表中。当designe回滚其token_身份验证时,我只想在用户每次登录时创建自定义token,并通过http头发送它,这只是为了安全api。我现在完全迷路了

我猜这与在protect_from_伪造上使用null_会话有关。我无法想象,如果没有跟踪交互的会话,您可以进行身份验证。此外,我会考虑为您的API使用不同的基类,而不是在ApplicationController中使用特定的protect_from_forgery覆盖。我面临着类似的问题。你找到解决办法了吗?@Brounofaca差不多一年前就解决了这个问题,我通过修改Devage gem版本解决了这个问题,并且运行顺利。我差点撞了我的头7天。我猜这与使用空会话来防止伪造有关。我无法想象,如果没有跟踪交互的会话,您可以进行身份验证。此外,我会考虑为您的API使用不同的基类,而不是在ApplicationController中使用特定的protect_from_forgery覆盖。我面临着类似的问题。你找到解决办法了吗?@Brounofaca差不多一年前就解决了这个问题,我通过修改Devage gem版本解决了这个问题,并且运行顺利。七天来我差点撞到脑袋。
protect_from_forgery with: :null_session, if: Proc.new { |c|     c.request.format.include? 'application/json' }