【问题标题】:How do I change user status along with Devise actions如何更改用户状态以及设计操作
【发布时间】:2014-05-23 22:36:42
【问题描述】:

我正在使用带有 Devise 3.2.4 的 Rails 4.1

我正在使用 Devise 的电子邮件确认来设置用户帐户,但我还需要在电子邮件确认后执行一些操作,例如设置帐单信息,然后才能将帐户视为活动帐户。

我如何管理用户的状态以及 Devise 的机制?

即当用户第一次注册时,我希望他们的状态是“新的”。当他们确认他们的电子邮件时,我希望他们的状态更改为“email_confirmed”,当他们提交付款信息时,我希望将其更改为“活动”。我还想说明他们何时更改电子邮件地址——他们的状态需要返回到“新”。

【问题讨论】:

  • 您是否希望用户在其电子邮件已确认但尚未提交付款信息的情况下能够登录?
  • 是的。我只是想知道我在哪里编写代码来自定义设计事件。

标签: ruby-on-rails ruby devise


【解决方案1】:

Devise 在用户表中使用“confirmation_token”字段。您可以使用它来设置所有条件。您可以在用户表中添加一个布尔字段,让我们说“活动”(默认为 false)。当新用户注册时,“confirmation_token”字段包含您的令牌,因此您可以检查其非零条件,但我们现在不需要用户处于活动状态,因此“活动”字段将保持为 false。现在,当用户单击电子邮件中的链接时,设计将“confirmation_token”字段更改为 nil,以便您再次检查它,但我们仍然不希望用户处于活动状态,因此您的“活动”字段将保持为 false。

现在,如果您在用户单击电子邮件中的确认令牌时查看设计 github 存储库,您的应用将被重定向到 confirmation controllers show action

在您的情况下,您可以将用户重定向到您的付款信息页面,并显示“您需要完成付款信息才能进行交易”之类的通知或您可能喜欢的任何内容。您必须重写 devise after_confirmation_path 方法,例如:

# The path used after confirmation.
def after_confirmation_path_for(resource_name, resource)
  if signed_in?(resource_name)
    signed_in_root_path(resource)
  else
    # your payment information page path
  end
end 

当用户成功完成付款信息详细信息时,您可以将他/她的活动字段设置为 true 并从那里开始构建。

【讨论】:

  • 这并不是我想要的,因为我将拥有更多的状态,而不仅仅是“活跃”。如果用户决定更改他们的电子邮件,我如何同时更改他们的状态?我正在寻找定制设计的方法,而不仅仅是解决它。
  • 如果您需要更多状态而不是布尔字段“活动”,您可以使用字符串字段“状态”并根据我描述的条件更改其值以及更改电子邮件更改的状态参考here
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2017-08-27
  • 2022-10-18
  • 1970-01-01
  • 2018-08-17
  • 1970-01-01
相关资源
最近更新 更多