[英]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.