簡體   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