启用“可确认”模块后,Devise将不允许未经确认的用户在预定义的时间段过去之后登录.而是将用户重定向回登录页面,并显示闪烁的消息“您必须在继续之前确认您的帐户”.
这是一个不良的交互模式,因为Flash通知不能为用户提供足够的空间来正确解释访问被拒绝的原因,“确认您的帐户”是指提供重新发送确认的链接,以及如何检查的说明你的垃圾邮件夹等等.
有没有办法改变这个行为重定向到一个特定的URL呢?
解决方法
对不起,我以为你的意思是注册后不能登录.所以下面的工作原理是如何在注册后指导用户,并且您需要做什么来登录是创建一个自定义的Devise :: FailureApp
请参阅维基页面:https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated
然后在您的自定义FailureApp覆盖redirect_url方法从https://github.com/plataformatec/devise/blob/master/lib/devise/failure_app.rb:
def redirect_url if warden_message == :unconfirmed custom_redirect_path else super end end
在RegistrationsController中有一个控制器方法after_inactive_sign_up_path_for可以覆盖以完成此操作.
首先在路由中,您需要指定使用您的自定义控制器:
配置/ routes.rb文件:
devise_for :users,:controllers => { :registrations => "users/registrations" }
应用程序/控制器/用户/ registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController protected def after_inactive_sign_up_path_for(resource) signed_up_path end end
在这种情况下,我的App我的Devise模型是用户,所以如果您的模型的名称不同,您可能需要更改该命名空间.我希望我的用户被重定向到signed_up_path,但您可以将其更改为所需的路径.