ruby-on-rails – Devise with Confirmable – 当用户尝试使用未经确认的电子邮件登录时,将用户重定向到自定义页面

启用“可确认”模块后,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,但您可以将其更改为所需的路径.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...