Chcę utworzyć niestandardową strategię autoryzacji dostępu do interfejsu API. Postępowałem zgodnie z przykładowym kodem pod numerem Devise ignoring custom strategy.Poszukuj ignoruj moją niestandardową strategię
Problem polega na tym, że ważny? metoda w mojej strategii Api nigdy nie jest uruchamiana (w oparciu o próbę podważenia jej).
Mój kod:
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
aw inicjatora opracować:
config.warden do |manager|
manager.default_strategies.unshift :api
end
Co jeszcze mogę zrobić, wydaje się Devise zawsze używać domyślnego strategię. AFAIK, to powinno wystarczyć ...
EDIT ------- --------
wymagam na samym szczycie mojej opracować strategię inicjatora takiego:
require Rails.root.join('app/devise/strategies/api')
Wiem, że strategia jest ładowana podczas rozruchu, ponieważ jeśli podam połączenie wewnątrz klasy, rozpocznie się sesja podważania. Ale klawisze Pry wewnątrz tych metod nigdy nie działają. : -S
Mam tę linię u góry inicjalizatora devise: require Rails.root.join ('app/devise/strategies/api ') i jeśli dodam połączenie wewnętrzne w strategii, zostanie ono załadowane po uruchomieniu aplikacji rails. ALE wszystkie rozmowy telefoniczne, które mam, są ważne? metody nigdy nie są wywoływane. – Alain