设计-如何在验证页面上允许更改未确认的电子邮件(更正)

时间:2018-08-12 23:46:03

标签: ruby-on-rails devise devise-confirmable

我目前正在实施Devise Confirmable,以便将用户发送到确认页面“我们已向发送确认电子邮件,请检查并单击链接”。

系统要求我实施一项功能,该功能允许用户在遇到错误时编辑该电子邮件,并用于将验证更新并发送到新电子邮件。这仅适用于全新帐户,不适用于其中包含任何数据的现有帐户。

用户在验证之前没有登录,我正在向页面发送params [:uuid],该页面在每次重新加载时都会被擦除-这不是一个好方法。我想我可以使用本地存储...

有人做过吗?

2 个答案:

答案 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)

您可以做的是

例如,

  1. 如果向用户发送了带有链接的确认邮件,并且他单击了链接,那么此时您可能会看到一个状态栏,该栏会将状态更改为pending

  2. 现在,您可以允许用户更改其电子邮件,直到其帐户状态保持为pending。此时,如果用户想返回并更改他的电子邮件,他将并收到带有链接的确认邮件。

  3. 假设我们拥有approved状态,只有他登录应用程序后,状态将从pending变为approved

此帮助吗?