繁体   English   中英

设计忽略我的自定义策略

[英]Devise ignore my custom strategy

我想创建一个用于访问API的自定义身份验证策略。 我按照Devise中的示例代码忽略了自定义策略

问题是有效吗? 我的Api策略中的方法永远不会运行(基于试图撬开它)。

我的代码:

module Devise
  module Strategies
    class Api < Devise::Strategies::Base
      def valid?
        binding.pry
        params[:request_source] == 'api'
      end

      def authenticate!
        #do stuff here

        if user
          success!(user)
        else
          warden.custom_failure!
          render :json=> {:success=>false, :message=>"Error with your login or password"}, :status=>401
        end
      end
    end

    Warden::Strategies.add(:api, Devise::Strategies::Api)

  end
end

并在设计初始化程序中:

config.warden do |manager|
  manager.default_strategies.unshift :api
end

无论我做什么,似乎Devise总是使用其默认策略。 AFAIK,这应该够了......

- - - -编辑 - - - -

我在我的设计初始化程序的顶部需要这样的策略:

require Rails.root.join('app/devise/strategies/api')

我知道策略是在启动时加载的,因为如果我在类中放入一个pry调用,它将启动一个pry会话。 但是方法内部的Pry调用永远不会运行。 :-S

找到答案了!

我不得不用这个:

config.warden do |manager|
  manager.default_strategies(scope: :user).unshift :api
end

使它工作。 奇怪的是,我在网上看到的很多示例代码都没有使用它:-S

您何时需要自定义策略? 与示例相比,您在此处添加策略而不是在初始化程序中。 您可以尝试在初始化程序的顶部要求自定义策略,以确保在将其添加到default_strategies之前加载它。

如果这不起作用,不要害怕在设计本身添加一些临时put语句,其中调用authenticate来检查default_strategies。 也就是说,如果你使用调试器还不是很舒服,那就是我要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM