if params[:confirm_token] == "true"
user = User.find_by(email: params[:email])
binding.pry
sign_in(user)
# super
end
我需要在没有密码的情况下验证用户。
我尝试了 sign_in(user),但是当它呈现时显示 401 invalid credentials
尝试使用 sign_in 方法登录用户,但没有成功。
您可以在设计中定义自定义策略。通过添加自定义策略设计 gem 将负责用户登录。
添加策略文件初始化文件夹
# config/initializers/confirm_token_strategy.rb
module Devise
module Strategies
class ConfirmToken < Base
def valid?
params[:confirm_token].present?
end
def authenticate!
confirm_token_object = ConfirmTokenObject.find_by(token: params[:confirm_token])
# token verification
if confirm_token_object.blank?
fail!("#{params[:confirm_token]} is not a valid code or expired!")
else
user = User.find_by(email: params[:email])
success!(user)
end
end
end
end
end
将策略添加到监狱长
# config/initializers/devise.rb
config.warden do |manager|
manager.strategies.add(:confirm_token, Devise::Strategies::ConfirmToken)
end
在监狱长认证中使用策略
# users_controller.rb
def verify_confirm_token
self.resource = warden.authenticate!(:confirm_token)
sign_in_and_redirect resource and return if resource
end