更改密码时防止Devise发送电子邮件

时间:2013-01-31 20:16:31

标签: ruby-on-rails devise

我正在使用Devise和我的Rails 3应用程序。重置密码的当前行为是单击“忘记密码?”链接。这里的链接是:

(url)/password/new.user

将在Devise passwords_controller.rb中调用以下方法:

def new
    build_resource({})
end

此方法将执行:

  1. 生成密码重置令牌并将其添加到数据库

  2. 向具有包含令牌的链接的人发送电子邮件:

    (URL)/密码/编辑?reset_password_token = XXXXXXXXXXXXXXX

  3. 有没有办法说服Devise只执行第1步而不是第2步?如果可能的话,我是否应该注意任何安全问题,我确实采用这种方法来简化网站的一部分。

3 个答案:

答案 0 :(得分:3)

我建议覆盖用户(?)模型上的send_devise_notification,并在通知值为:reset_password_instructions时返回true。像这样:

# app/models/user.rb
def send_devise_notification(notification)
    return true if notification == :reset_password_instructions
end

检查他们关于如何覆盖/自定义发送电子邮件行为的示例 https://github.com/plataformatec/devise/blob/master/lib/devise/models/authenticatable.rb#L127

答案 1 :(得分:1)

您可以在实例级别禁用它:

/abc.htm

答案 2 :(得分:0)

问题的标题很笼统,但问题本身更具体。这是截至 2021 年普遍问题的答案。

为防止在更改用户密码时发送密码更改电子邮件通知,请在保存用户之前调用用户的 skip_password_change_notification!

user = User.find(123)
user.skip_password_change_notification!
user.password = 'DoNotUse$123'
user.save