我目前正在实施Devise Confirmable,以便将用户发送到确认页面“我们已向发送确认电子邮件,请检查并单击链接”。
系统要求我实施一项功能,该功能允许用户在遇到错误时编辑该电子邮件,并用于将验证更新并发送到新电子邮件。这仅适用于全新帐户,不适用于其中包含任何数据的现有帐户。
用户在验证之前没有登录,我正在向页面发送params [:uuid],该页面在每次重新加载时都会被擦除-这不是一个好方法。我想我可以使用本地存储...
有人做过吗?
答案 0 :(得分:1)
我会将未确认的帐户ID存储在服务器上的会话中:session[:unconfirmed_account] = 999
。然后,当用户未通过身份验证并且存在session[:unconfirmed_account]
时,在页面上显示一条通知,其中包含帐户未确认的电子邮件以及用于更改该帐户的链接或按钮。
我认为在会话中设置:unconfirmed_account
变量的最好方法是重写Devise的Devise::RegistrationsController#create
方法。在此处创建新的未确认帐户。
class RegistrationsController < Devise::RegistrationsController
def create
super do |resource|
if resource.persisted?
session[:unconfirmed_account] = resource.id
end
end
end
end
有关如何自定义Devise
控制器的信息,请参见https://www.rubydoc.info/github/plataformatec/devise#Configuring_controllers
用户确认电子邮件并通过身份验证后,应删除会话变量。
class ConfirmationsController < Devise::ConfirmationsController
def show
super do |resource|
if resource.errors.empty?
session.delete(:unconfirmed_account)
end
end
end
end
当用户更新未确认的电子邮件时,应更新帐户,并将新的确认消息发送到新的电子邮件地址。这是您要实现的)
答案 1 :(得分:0)
您可以做的是
例如,
如果向用户发送了带有链接的确认邮件,并且他单击了链接,那么此时您可能会看到一个状态栏,该栏会将状态更改为pending
。
现在,您可以允许用户更改其电子邮件,直到其帐户状态保持为pending
。此时,如果用户想返回并更改他的电子邮件,他将并收到带有链接的确认邮件。
假设我们拥有approved
状态,只有他登录应用程序后,状态将从pending
变为approved
。
此帮助吗?