use*_*721 13 ruby-on-rails devise
我正在使用devise gem进行身份验证.
在我的应用程序中,管理员将创建用户,因此当管理员创建用户时,我想要用户的重置密码链接.
这是我的行动: -
def create
@user = User.new(user_params)
@user.password = '123123123'
@user.password_confirmation = '123123123'
if @user.save
@user.update_attributes(:confirmation_token => nil,:confirmed_at => Time.now,:reset_password_token => (0...16).map{(65+rand(26)).chr}.join,:reset_password_sent_at => Time.now)
UserMailer.user_link(@user).deliver
redirect_to users_path
else
render :action => "new"
end
end
Run Code Online (Sandbox Code Playgroud)
这是我重置用户密码的链接
但是当我打开链接并更新密码时,我收到重置密码令牌无效.
Rai*_*Fan 37
如果您正在使用设计,为什么要创建自己的密码重置令牌?Devise有一个功能. http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Recoverable
如果您想知道这是设备用户想要重置密码时的设计:
raw, enc = Devise.token_generator.generate(self.class, :reset_password_token)
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
self.save(validate: false)
Run Code Online (Sandbox Code Playgroud)
self是这里的User对象
在您的URL中,您必须传递raw作为reset_password_token参数
小智 16
如果您不希望它发送指令,只需设置并存储令牌,您就可以在设计recoverable关注中调用私有方法set_reset_password_token。
你可以通过做类似的事情来做到这一点user.send(:set_reset_password_token)。
您可以使用以下命令生成令牌:
Devise.token_generator.generate(User, :reset_password_token)
Run Code Online (Sandbox Code Playgroud)
虽然这本身就是一个无用的字符串.如果您确实想在链接中使用它来重置密码,则需要将其附加到用户:
user.reset_password_token = hashed_token
user.reset_password_sent_at = Time.now.utc
Run Code Online (Sandbox Code Playgroud)
然后向他们发送一封电子邮件,其中包
edit_password_url(@user, reset_password_token: @token)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14542 次 |
| 最近记录: |