【问题标题】:rails Devise - How to redirect to a Getting Started Link - After validating an emailrails Devise - 如何重定向到入门链接 - 验证电子邮件后
【发布时间】:2010-12-16 00:50:38
【问题描述】:

我将 Devise 与我的 rails 3 应用程序一起使用。该应用要求用户在继续之前验证他们的电子邮件。

在用户通过收到的电子邮件确认消息成功验证其电子邮件地址后,我如何将用户重定向到 /gettingstarted 等特定 URL?

谢谢

【问题讨论】:

  • 你有想过这个吗?

标签: ruby-on-rails devise ruby-on-rails-3


【解决方案1】:

当用户点击确认链接时,他们会被带到一个确认页面,该页面会检查确认令牌,如果它有效,则会自动将他们登录到应用程序中。您可以覆盖 ApplicationController (as shown on the Devise wiki) 中的 after_sign_in_path_for 方法,然后在用户首次登录时将它们重定向到您的入门页面。

def after_sign_in_path_for(resource_or_scope)
  if resource_or_scope.is_a?(User) && first login
    getting_started_path
  else
    super
  end
end

对于“首次登录”,您可以测试 confirm_at 时间戳是否在几分钟内,如果您还在设计中使用可跟踪模块,您可以检查 sign_in_count 是否为 1,或者您可以在用户中创建自己的字段跟踪此信息的模型。

【讨论】:

  • 谢谢,但我不想每次都将用户重定向到这里,而是在他们第一次确认他们的电子邮件地址之后
  • 我的想法是,您可以检查一下它是否是第一次登录,可以检查 confirm_at 时间戳、sign_in_count 或其他一些自定义字段。此检查将代替我的代码示例中的“&& first login”。然后他们只会在第一次登录时被重定向,然后他们会转到您的默认登录页面。
【解决方案2】:

我正在https://github.com/plataformatec/devise/blob/master/app/controllers/devise/confirmations_controller.rb检查设计源代码

似乎我们有一个回调来执行它“after_confirmation_path_for”但如果不重写 Devise::ConfirmationController 就无法让它工作

我希望这会有所帮助,如果有人让它工作,只需定义 after_confirmation_path_for 就告诉我们。

【讨论】:

    【解决方案3】:

    我正在使用“可跟踪”模型中的 last_sign_in_at 字段来实现这一点。我的根操作中有以下代码:

    if current_user.last_sign_in_at.nil? then
      redirect_to :controller => :users, :action => :welcome
    end
    

    http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Trackable

    似乎工作得相当好。

    【讨论】:

      【解决方案4】:

      在'after_sign_in_path_for'里面是current_user.last_sign_in_at.nil?将不起作用,因为它在第一次登录后已经过时了。但是这会起作用

      if current_user.sign_in_count == 1
      # do 1 thing
      else
      # do another thing
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-01
        • 2020-11-01
        • 2016-08-31
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-11
        相关资源
        最近更新 更多