暂停发送重置密码电子邮件,直到某些指示器设备 rails
Holding sending reset password emails until some indecator devise rails
我有一个 PasswordController
继承自 Devise::PasswordsController
,我做了一个 create
函数来帮助我发送用户重置密码通知电子邮件,它的实现:
def create
# I need to put some condition on the next line
self.resource = resource_class.send_reset_password_instructions(resource_params)
if successfully_sent?(resource)
render :json => "Request successfully sent"
else
render :json => resource.errors, :status => 422
end
end
它工作正常,但如果用户点击重置密码 5 次,将向他发送 5 封电子邮件(如果发生延迟或某些事情 用户从不等待,他们需要快速响应)最后一个只会起作用,所以我想在这个令牌过期之前禁止发送电子邮件,我搜索了一下但找不到任何东西,我考虑在用户 table 中创建一个新属性,这将是a datetime
表示最后一次发送电子邮件是什么时候,但我想问一下是否有更好的方法来使用 devise。
您可以使用user.reset_password_period_valid?
def reset_password_period_valid?
reset_password_sent_at && reset_password_sent_at.utc >= self.class.reset_password_within.ago.utc
end
这基本上就是您建议的实施方式;但如果您使用 Rcoverable
设计模块,它已经是内置的!
我有一个 PasswordController
继承自 Devise::PasswordsController
,我做了一个 create
函数来帮助我发送用户重置密码通知电子邮件,它的实现:
def create
# I need to put some condition on the next line
self.resource = resource_class.send_reset_password_instructions(resource_params)
if successfully_sent?(resource)
render :json => "Request successfully sent"
else
render :json => resource.errors, :status => 422
end
end
它工作正常,但如果用户点击重置密码 5 次,将向他发送 5 封电子邮件(如果发生延迟或某些事情 用户从不等待,他们需要快速响应)最后一个只会起作用,所以我想在这个令牌过期之前禁止发送电子邮件,我搜索了一下但找不到任何东西,我考虑在用户 table 中创建一个新属性,这将是a datetime
表示最后一次发送电子邮件是什么时候,但我想问一下是否有更好的方法来使用 devise。
您可以使用user.reset_password_period_valid?
def reset_password_period_valid?
reset_password_sent_at && reset_password_sent_at.utc >= self.class.reset_password_within.ago.utc
end
这基本上就是您建议的实施方式;但如果您使用 Rcoverable
设计模块,它已经是内置的!