制定自定义策略:仍然设置会话 Cookie

Devise Custom Strategies: Still Setting Session Cookies

我正在使用 Devise 在 Rails 应用程序上对我的 Ruby 用户进行身份验证。到目前为止,我一直在使用标准的基于 Cookie 的会话来对用户进行身份验证,但现在我需要允许基于令牌的身份验证,并且我通过 custom Warden strategy.

实现了这一点

为了这个例子,我的自定义策略代码是:

module Devise
  module Strategies
    class CustomAuthenticatable < Base
      def valid?
        params.has_key? :email
      end 

      def authenticate!
        success!(User.find_by(email: params[:email]))
        #fail
      end 
    end 
  end 
end

所以这对于第一个请求按预期工作:当我 GET /api/my_controller/url?email=user@example.com 用户通过身份验证时,我得到了预期的响应。

但是等一下: 当我发出第二个请求时:GET /api/my_controller/url,用户仍然通过身份验证。

经过进一步检查,我发现正在发送一个 Set-Cookie,带有 Devise 会话。

所以这是我的问题:

如何在使用自定义策略时禁用 Set-Cookie

您可以阻止创建会话,如此处所述。

Prevent session creation on rails 3.2.2 for RESTful api

resource = warden.authenticate!(:scope => resource_name, :store => !(request.format.xml? || request.format.json?))

其他一些选项,请考虑Rails 3 disabling session cookies