设计和设计令牌认证

时间:2016-09-01 21:09:54

标签: ruby-on-rails ruby devise token

我正在尝试将rails web应用程序与rails API一起用于移动应用程序。为此,我使用Devise和Devise token auth。

我在Devise token auth gem中编写了路由,因此我可以拥有常规Devise和Devise身份验证令牌的路由。

我有两个问题:

  1. 当我向application_controller添加包含DeviseTokenAuth :: Concerns :: SetUserByToken时,它会覆盖Devise authenticate_user!,而在网络方面,我正在使用令牌进行身份验证。
  2. 可能的解决方案:我创建了API控制器继承的separet ApiApplicationController。

    class ApiApplicationController < ActionController::Base
      include DeviseTokenAuth::Concerns::SetUserByToken
      protect_from_forgery with: :null_session
    end
    
    1. 对于我在卷曲到我的API时执行的每个POST请求,我需要添加CSRF令牌。
    2. 可能的解决方案:我可以在if: Proc.new { |c| c.request.format == 'application/json' }之后添加到ApplictionController和ApiApplicationController protect_from_forgery with: :null_session

1 个答案:

答案 0 :(得分:1)

我曾经遇到过同样的问题,我的解决方案目前正在运作:

# application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery with: :null_session, if: ->{request.format.json?}
end

# api_application_controller.rb
class ApiApplicationController < ActionController::Base
  include DeviseTokenAuth::Concerns::SetUserByToken

  before_action :authenticate_user!
end