Tôi muốn tạo chiến lược xác thực tùy chỉnh để truy cập API. Tôi đã theo mã mẫu tại Devise ignoring custom strategy.Devise bỏ qua chiến lược tùy chỉnh của tôi
Vấn đề là hợp lệ? phương pháp trong chiến lược Api của tôi là không bao giờ chạy (dựa trên cố gắng để nâng lên trong nó).
Mã của tôi:
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
và trong initializer devise:
config.warden do |manager|
manager.default_strategies.unshift :api
end
Tôi phải làm gì bao giờ hết, nó có vẻ như lập mưu luôn luôn sử dụng chiến lược mặc định của nó. AFAIK, điều này sẽ là đủ ...
------- EDIT --------
tôi đòi hỏi chiến lược như thế này ở đầu rất của initializer devise tôi:
require Rails.root.join('app/devise/strategies/api')
Tôi biết chiến lược được tải vào lúc khởi động vì nếu tôi đặt một cuộc gọi nâng lên trong lớp, nó sẽ bắt đầu một phiên nâng lên. Nhưng các cuộc gọi Pry bên trong các phương pháp không bao giờ chạy. : -S
Tôi có dòng này ở đầu trình tạo khởi tạo: yêu cầu Rails.root.join ('app/devise/chiến lược/api ') và nếu tôi thêm một cuộc gọi nâng lên bên trong chiến lược, nó sẽ được tải khi ứng dụng đường ray bắt đầu. NHƯNG tất cả các cuộc gọi pry tôi có bên trong hợp lệ? phương pháp không bao giờ được gọi. – Alain