【问题标题】:Devise - how to allow change of unconfirmed email (correction) on verification page设计 - 如何允许在验证页面上更改未确认的电子邮件(更正)
【发布时间】:2018-08-12 23:46:03
【问题描述】:

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

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

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

以前有人做过吗?

【问题讨论】:

  • 您是否允许新用户在确认电子邮件之前访问您的应用?
  • 不,在确认之前他们会退出。

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


【解决方案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

当用户更新未确认的电子邮件时,应更新帐户并将新的确认消息发送到新的电子邮件地址。这是给你实现的)

【讨论】:

    【解决方案2】:

    你能做的是,

    例如,

    1. 如果用户收到一封带有链接的确认邮件,并且他点击了该链接,此时您可能会有一个状态列将状态更改为pending

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

    3. 假设我们有一个approved 状态,只有在他登录应用程序后,它才会从pending 更改为approved

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2019-11-23
      • 2014-12-21
      • 1970-01-01
      • 2016-06-08
      • 2017-02-22
      相关资源
      最近更新 更多