我已经完成了http://railstutorial.org/chapters的Rails 4教程,并完成了最的练习。对于创建应用程序的下一步,项目的几个建议扩展位于我的列表的顶部。这些是注册功能和记住密码功能时的电子邮件确认。我注意到有几个宝石可以帮助我,但是当我看了几个Railscast并阅读了一些教程时,它们并没有真正适用于我的情况或涉及一个复杂的宝石来处理它(Devise)。另外,在Devise的教程中总是假设我从头开始,但事实并非如我所说的那样。任何人都可以帮助我,或指出我正确的方向来完成这两项功能,我所拥有的经验有限,被认为安全且易于实施?
另外,值得一提的是,我最终选择了state_machine作为一个有用的宝石来利用这个功能以及未来的功能。如果有人对这种或那种方式有想法,我很乐意听到。现在,我的用户模型中存在两种状态:无效和活动。
如果我能澄清任何事情,请告诉我。谢谢!
我选择在我发送注册我网站的用户的电子邮件中实施注册注册链接。我创建了一个UserMailer类,可以在注册时成功向用户发送电子邮件。我正在考虑将更新放在我的users表的email_token属性的哪个位置:
/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
...
/app/models/user.rb
before_create :create_email_token
...
private
def create_email_token
self.email_token = User.encrypt(User.new_token)
end
:active
的整数值
和:inactive
使用state_machine
gem。答案 0 :(得分:1)
以下是解决方案的高级概述。
在用户模型上,您将需要一个默认状态为false的布尔列。您还需要一个字符串列来存储令牌。令牌将是通过SecureRandom.urlsafe_base64
。
然后你需要一个控制器,它将接受令牌作为参数,然后通过其令牌找到用户并更改上述布尔字段的值。
接下来,您需要一个邮件,它会向用户发送一封电子邮件,并使用该网址激活该帐户。
如果您有任何其他问题,请与我们联系。
答案 1 :(得分:0)
您可以使用令牌字段执行此操作。当他们登录并输入正确的令牌(证明他们已放入正确的电子邮件)时,其用户数据库条目中的令牌列将设置为null,这意味着它们已经过验证。