从设计中覆盖SessionsController时,Warden身份验证失败

时间:2016-04-28 12:25:54

标签: api session ruby-on-rails-4 devise warden

我一直在尝试使用Angular和带有Rails 4的API实现SPA。我决定使用会话控制器从API的设计会话控制器继承,并使用warden进行基于机架的身份验证。设计工作正常,直到我登录,它成功重定向到仪表板页面然而在API命名空间会话控制器我无法与warden进行身份验证。

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

当我使用用户名和密码卷曲时

curl http://localhost:3000/api/session -d '' -u abc@123.com:12345678

Started POST "/api/session" for 127.0.0.1 at 2016-04-28 14:35:23 +0300
Processing by Api::SessionsController#create as JSON
Completed 401 Unauthorized in 1ms (ActiveRecord: 0.0ms)

它抱怨csrf之前我在基础控制器中修复了

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

我做错了吗?我检查了warden在会话结束后的中间件列表中。当设计回滚其token_authentication时,我只想在每次用户登录时创建自定义令牌,并通过http头发送它仅用于安全api。我现在完全迷失了。

0 个答案:

没有答案