【发布时间】:2014-02-17 00:57:03
【问题描述】:
我已经完成了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
还有:
- 我将如何命名负责响应
用户点击电子邮件中的网址?一种如何格式化
url,因此控制器将响应切换激活
我有什么状态?状态是一个整数值,名称为
:active和:inactive使用state_machinegem。 - 什么是指定路由的 RESTful 方式?如何在 user_mailer.rb 中生成 url?它应该是 get 还是 put 在我的 routes.rb 中?
【问题讨论】:
-
“记住密码”你说的是“记住我”吗?至于注册时的电子邮件确认,真的需要吗?这一步是失去用户的好地方。这个过程并不能很好地转换。我会推荐最简单的路线。不做。
-
记住密码是在您忘记密码时,应用程序会引导您完成一个过程,允许您恢复密码或使用临时密码重置密码。 “记住我”会这样做吗?至于电子邮件确认,我当然希望有机会向我的用户发送电子邮件,如果我做的唯一检查是电子邮件格式的正则表达式,我无法假设他们的电子邮件是真实的一。另外,在没有确认的情况下,为什么要存储它呢?你的意思是这个过程不能很好地转换。我所知道的最大的网站都使用这个流程并且不会失去很多用户,对吧?
-
那不是“记住密码”,是“忘记密码”。
-
你是对的。但这里的另一个主要问题是电子邮件确认。有什么想法吗?
-
@JakeSmith 仅供参考,您在一个 SO 线程中提出了两个问题,您可能应该将每个问题拆分为各自的线程。至于“记住我”功能,我建议观看 Ryan Bate 的 railscast 第 274 集,railscasts.com/episodes/274-remember-me-reset-password
标签: ruby-on-rails railstutorial.org password-recovery email-confirmation