[英]How to sign_in user after devise email confirmation in Rails
我试图在过去7小时内在确认电子邮件后自动登录用户,但是当我单击确认链接时,它会显示“您的电子邮件地址已成功确认”。 但不登录用户。 我已经在确认控制器和路线中编写了此代码
devise_for :users, controllers: {confirmations: 'users/confirmations'}
class ConfirmationsController < Devise::ConfirmationsController
#private
def after_confirmation_path_for(resource_name, resource)
sign_in(resource)
render plain: "here"
redirect_to "/admins/view_account", notice: "User deleted."
end
end
任何帮助将不胜感激谢谢。
请注意,电子邮件确认后自动登录曾经是Devise的默认行为,但由于安全措施而被更改(在3.1
之后),您可以在此处和此处看到更多信息 。
如果仍要执行此操作,请根据Devise的版本,确保在项目内的config/initializers/devise.rb
文件中设置以下行:
config.allow_insecure_sign_in_after_confirmation=true
如果您使用的是最新的Devise版本,则可能需要替代,使用app/controllers/users/confirmations_controller.rb
上的此代码扩展默认控制器,以代替上面提到的控制器代码( 请注意名称空间)和提到的路径 ):
class Users::ConfirmationsController < Devise::ConfirmationsController
def show
super do |resource|
sign_in(resource) if resource.errors.empty?
end
end
end
并确保您在问题开头粘贴的代码属于config/routes.rb
:
devise_for :users, controllers: { confirmations: 'users/confirmations' }
希望能帮助到你!
我自己解决了。
路线应该是这样的
devise_for :users, controllers: {confirmations: 'confirmations'} do
#put "confirm_user", to: "confirmations#confirm_user"
get "confirmation", to: "confirmations#after_confirmation_path_for"
end
控制器就是这样
class ConfirmationsController < Devise::ConfirmationsController
#private
def after_confirmation_path_for(resource_name, resource)
sign_in(resource)
#render plain: "here"
#redirect_to "/admins/"
end
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
if resource.errors.empty?
set_flash_message(:notice, :confirmed) if is_flashing_format?
sign_in(resource) # <= THIS LINE ADDED
redirect_to "/your path/"
else
respond_with_navigational(resource.errors, :status => :unprocessable_entity){ render :new }
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.