【发布时间】:2010-12-16 00:50:38
【问题描述】:
我将 Devise 与我的 rails 3 应用程序一起使用。该应用要求用户在继续之前验证他们的电子邮件。
在用户通过收到的电子邮件确认消息成功验证其电子邮件地址后,我如何将用户重定向到 /gettingstarted 等特定 URL?
谢谢
【问题讨论】:
-
你有想过这个吗?
标签: ruby-on-rails devise ruby-on-rails-3
我将 Devise 与我的 rails 3 应用程序一起使用。该应用要求用户在继续之前验证他们的电子邮件。
在用户通过收到的电子邮件确认消息成功验证其电子邮件地址后,我如何将用户重定向到 /gettingstarted 等特定 URL?
谢谢
【问题讨论】:
标签: ruby-on-rails devise ruby-on-rails-3
当用户点击确认链接时,他们会被带到一个确认页面,该页面会检查确认令牌,如果它有效,则会自动将他们登录到应用程序中。您可以覆盖 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,或者您可以在用户中创建自己的字段跟踪此信息的模型。
【讨论】:
似乎我们有一个回调来执行它“after_confirmation_path_for”但如果不重写 Devise::ConfirmationController 就无法让它工作
我希望这会有所帮助,如果有人让它工作,只需定义 after_confirmation_path_for 就告诉我们。
【讨论】:
我正在使用“可跟踪”模型中的 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
似乎工作得相当好。
【讨论】:
在'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
【讨论】: