有什么简单的方法可以让设备密码成为临时密码吗?
我想做这样的事情:
User.first.update(password: 'qwerty', lifetime: 1.hour)
我想为特定用户设置临时密码
我的意思是宝石或例子之类的东西
什么也没尝试,寻找完成的解决方案
Devise 没有内置功能可以执行此操作,因此您需要使用自己的解决方案。 基本方法可能如下所示:
添加密码过期列: 您需要向用户表添加一个新列来跟踪密码的过期时间,即用户表中的一个字段
password_expires_at:datetime
扩展用户模式: 接下来,您需要修改用户模型来处理密码过期逻辑,并在密码更新时设置过期字段
class User < ApplicationRecord
devise ... blah blah
before_save :set_password_expiration
def set_password_expiration
self.password_expires_at = Time.current + 1.hour if self.encrypted_password_changed?
end
def password_expired?
self.password_expires_at && Time.current > self.password_expires_at
end
end
active_for_authentication?
方法以包含密码过期检查。
又是这样的def active_for_authentication?
super && !password_expired?
end
您现在应该能够执行以下操作:
User.first.update(password: 'qwerty', password_expires_at: Time.current + 1.hour)
这只是帮助您入门的基本实现。您需要处理过期的密码等。因此,为此您可以将它们重定向到密码重置页面(通常您可以通过向 Devise SessionsController 添加一些自定义逻辑来完成此操作)