Rails 4确认新用户的电子邮件地址

时间:2014-02-17 00:57:04

标签: ruby-on-rails railstutorial.org password-recovery email-confirmation

我已经完成了http://railstutorial.org/chapters的Rails 4教程,并完成了的练习。对于创建应用程序的下一步,项目的几个建议扩展位于我的列表的顶部。这些是注册功能和记住密码功能时的电子邮件确认。我注意到有几个宝石可以帮助我,但是当我看了几个Railscast并阅读了一些教程时,它们并没有真正适用于我的情况或涉及一个复杂的宝石来处理它(Devise)。另外,在Devise的教程中总是假设我从头开始,但事实并非如我所说的那样。任何人都可以帮助我,或指出我正确的方向来完成这两项功能,我所拥有的经验有限,被认为安全且易于实施?

另外,值得一提的是,我最终选择了state_machine作为一个有用的宝石来利用这个功能以及未来的功能。如果有人对这种或那种方式有想法,我很乐意听到。现在,我的用户模型中存在两种状态:无效和活动。

如果我能澄清任何事情,请告诉我。谢谢!

编辑:

我选择在我发送注册我网站的用户的电子邮件中实施注册注册链接。我创建了一个UserMailer类,可以在注册时成功向用户发送电子邮件。我正在考虑将更新放在我的users表的email_token属性的哪个位置:

  • 选项1:

/app/controllers/users_controller.rb

 ...
 def create
   redirect_to_root_if_signed_in

   @user = User.new(user_params)

   if @user.save
     sign_in @user
+    @user.update_attribute(email_token: User.encrypt(User.new_token))
     UserMailer.signup_confirmation(@user).deliver
     flash[:success] = "Welcome to the Sample App!"
     redirect_to @user
   else
     render 'new'
   end
 end
 ...
  • 选项2:

/app/models/user.rb

   before_create :create_email_token

 ...

   private

     def create_email_token
       self.email_token = User.encrypt(User.new_token)
     end

此外:

  1. 我将命名为负责响应的控制器 用户点击电子邮件中的网址?如何格式化 url所以控制器将响应切换激活 我有状态吗?状态是一个名为:active的整数值 和:inactive使用state_machine gem。
  2. 指定路线的RESTful方式是什么?如何在user_mailer.rb中生成网址?它应该是获取还是放入我的routes.rb?

2 个答案:

答案 0 :(得分:1)

以下是解决方案的高级概述。

在用户模型上,您将需要一个默认状态为false的布尔列。您还需要一个字符串列来存储令牌。令牌将是通过SecureRandom.urlsafe_base64

之类的东西获得的随机字符串

然后你需要一个控制器,它将接受令牌作为参数,然后通过其令牌找到用户并更改上述布尔字段的值。

接下来,您需要一个邮件,它会向用户发送一封电子邮件,并使用该网址激活该帐户。

如果您有任何其他问题,请与我们联系。

答案 1 :(得分:0)

您可以使用令牌字段执行此操作。当他们登录并输入正确的令牌(证明他们已放入正确的电子邮件)时,其用户数据库条目中的令牌列将设置为null,这意味着它们已经过验证。