10

我随后将 :confirmable 添加到了我的 Rails 应用程序中。问题是,当我在添加 :confirmable 后注册时,我没有在注册后显示通知并告诉我发生了什么,例如:

You will receive an email with instructions about how to confirm your account in a few minutes.

为什么没有出现通知,添加 :confirmable 后如何添加该通知?

感谢帮助

4

1 回答 1

22

通知不会出现,因为该设备正在重定向到您的根路径,该根路径可能受设备身份验证保护。当您点击 root_path 时,您会被重定向回 sign_in 页面(因为设计无法登录用户,因为它尚未激活)。您可以通过在输入用户信息并点击“注册”按钮后查看您的开发日志来验证这一点 - 您将在日志中看到一个注册用户的请求,然后是一个导航到您的根 url 的请求(无论您的routes.rb),然后由于身份验证将导航重定向到登录页面。

在重定向期间,所有 flash 消息都会丢失(因为 flash 消息仅对下一个请求有效),当您从 root_path 重定向到 sign_in 页面时,您正在发出请求。因此,您要么需要在第一个请求被重定向之前使用 flash.keep,要么更改 after_sign_up 路径,这样重定向就不会发生。我建议更改 after_sign_up 路径,因为它更容易并且看起来是正确的方法。

为此,您需要使用自己的控制器进行注册并添加 after_sign_up_path 方法,该方法返回用于重定向的 url:

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

  private

  def after_inactive_sign_up_path_for(resource)
    new_user_session_path
  end
end

#config/routes.rb
devise_for :users, :controllers => { :registrations => "registrations" }

我还建议阅读与您类似的问题:Rails 3 and Devise: Redirecting to page following signup (confirmable)

于 2013-09-23T22:19:47.210 回答