1

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

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

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

编辑:

我选择在我发送给注册我网站的用户的电子邮件中实施注册注册链接。我创建了一个 UserMailer 类,该类在注册时成功向用户发送电子邮件。我正在考虑将更新放在用户表的 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 的控制器?如何格式化 url,以便控制器响应切换我的激活状态?状态是一个带有名称:active:inactive使用state_machinegem 的整数值。
  2. 指定路由的 RESTful 方式是什么?如何在 user_mailer.rb 中生成 url?它应该是 get 还是 put 在我的 routes.rb 中?
4

2 回答 2

1

这是解决方案的高级概述。

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

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

接下来,您需要一个邮件程序,它会向用户发送一封电子邮件,其中包含激活帐户的 URL。

如果您有任何其他问题,请告诉我。

于 2014-02-17T03:37:15.507 回答
0

您可以使用令牌字段来完成。当他们登录并输入正确的令牌(证明他们已经输入了正确的电子邮件)时,他们的用户数据库条目中的令牌列被设置为空,这意味着他们已经过验证。

于 2014-10-30T19:38:23.027 回答