ruby-on-rails - rails 设计 : Set password reset token and redirect user

标签 ruby-on-rails devise login-control

在我的应用程序中,针对特定用例,我创建一个新用户(以编程方式设置密码)并向他们发送一封确认电子邮件。

我希望他们能够在确认后立即更改密码(无需输入我不想发送给他们的系统生成的密码)

实际上我想要
1) 系统创建一个新的用户帐户并生成密码。
2) 系统发送确认邮件。
3) 用户单击确认并被重定向以输入密码(有效地将其发送到如下 URL)

<a href="http://localhost:3000/users/password/edit?reset_password_token=v5Q3oQGbsyqAUUxyqLtb">Change my password</a>

任何帮助/指示都会很棒。

最佳答案

一种简单的方法,只需一步即可让用户使用您建议的链接确认电子邮件地址并设置初始密码...

发送您的应用生成的一封电子邮件,其中包括重置密码 token ,并考虑用户拥有该 token 以确认该电子邮件地址的有效性。

在系统帐户生成代码中,假设用户模型是使用 :recoverable 和 :database_authenticatable Devise 模块设置的...

acct = User.new
acct.password = User.reset_password_token #won't actually be used...  
acct.reset_password_token = User.reset_password_token 
acct.email = "user@usercompany.com" #assuming users will identify themselves with this field
#set other acct fields you may need
acct.save

使用户在设置初始密码时,设备重置密码 View 更加清晰。

views/devise/passwords/edit.html.erb

...
<%= "true" == params[:initial] ? "Set your password" : "Reset your password" %>
...  

生成的电子邮件

Hi <%= @user.name %>
An account has been generated for you.
Please visit www.oursite.com/users/password/edit?initial=true&reset_password_token=<%= @user.reset_password_token %> to set your password.

无需在您的用户模型中包含 :confirmable Devise 模块,因为如果没有电子邮件中的 Reset_password_token,将无法访问您的应用创建的帐户。

Devise 将处理提交并清除 Reset_password_token 字段。

参见devise_gem_folder/lib/devise/models/recoverable.rbdatabase_authenticatable.rb详细信息reset_password_token方法和 friend 。

如果您想使用 Devise :confirmable模块而不是这种方法,请参阅 Devise wiki page .

关于ruby-on-rails - rails 设计 : Set password reset token and redirect user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894191/

相关文章:

ruby-on-rails - 如何使用带密码的 PEM 证书?

用于登录的身份验证过滤器和 servlet

javascript - “this”指的是 jQuery on() 中错误的动态生成元素

ruby-on-rails - 尝试理解 Ruby on Rails 中的加盐和散列密码

ruby-on-rails - 当 find 涉及单个属性但 create 涉及多个属性时实现 find_or_create_by

ruby-on-rails - 没有路线匹配 [GET] "/users/sign_out"rails 5

ruby-on-rails - 设计字段上的错误消息

ruby-on-rails - Devise:什么时候定制过多?

c# - Membership.ValidateUser 方法如何访问数据库?

asp.net - 使用 ASP.NET 登录控件时是否可以手动设置身份验证票证?