如何“安全地”更改devise用户的电子邮件地址?

10

默认情况下,devise 在注册和登录时使用电子邮件地址。

但我希望允许用户更改电子邮件地址。

如果我允许用户编辑电子邮件地址,并且用户指定了一个“不正确”的(即误输入的错字)电子邮件地址,然后用户退出,并且用户还忘记了打错电子邮件地址是什么,那么用户帐户就无法被该用户访问!

如何最好地解决这个问题?(除了创建一个单独的、不可更改的用户名字段,该字段将始终允许用户登录)

2个回答

17
你可以在用户更改电子邮件时强制用户再次确认他的帐户。
一旦更新了有关用户的密码,您需要取消确认该用户,然后重新发送确认电子邮件。
取消确认用户的方法如下:
user = User.find(1)
if user.confirmed?
  user.confirmed_at = nil
  user.save(:validate => false)
end
重新发送电子邮件确认信:

要重新发送电子邮件确认信:

user = User.find(1)
user.send_confirmation_instructions

希望这能帮到你!


17

Devise已经内置了这个功能。以下是来自initializer的相关信息:

# If true, requires any email changes to be confirmed (exactly the same way as
# initial account confirmation) to be applied. Requires additional unconfirmed_email
# db field (see migrations). Until confirmed new email is stored in
# unconfirmed email column, and copied to email column on successful confirmation.
config.reconfirmable = true

确认模块中,您可以了解其工作原理。


很可能在早期版本的Devise中没有实现(今天的版本是3.2.2)。 - peresleguine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接