ruby-on-rails - 如何更改用户状态以及 Devise 操作

标签 ruby-on-rails ruby devise

我正在使用 Rails 4.1 和 Devise 3.2.4

我正在使用 Devise 的电子邮件确认来设置用户帐户,但我还需要在电子邮件确认后做一些事情,例如在帐户被视为事件之前设置账单信息。

如何使用 Devise 的机制管理用户状态?

即当用户首次注册时,我希望他们的状态为"new"。当他们确认他们的电子邮件时,我希望他们的状态更改为“email_confirmed”,当他们提交付款信息时,我希望它更改为“事件”。我还想说明他们何时更改电子邮件地址——他们的状态需要返回到"new"。

最佳答案

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

现在,如果您在用户单击电子邮件中的确认 token 时查看 devise 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 并以此为基础。

关于ruby-on-rails - 如何更改用户状态以及 Devise 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839263/

相关文章:

ruby-on-rails - 发生错误,此迁移和所有后续迁移均已取消 [Rails DB 错误]

ruby-on-rails - Rails Edge/4 错误 `require' : cannot load such file -- thread_safe

c# - Ruby和Dot net之间的加解密

ruby-on-rails - 集成 Rails 4、timekit api、rest-client 和 Devise

javascript - 在 coffeescript 中调用命名函数的正确方法是什么?

ruby-on-rails - Rails 中的 Spreadsheet.open 给出此错误 "unknown encoding name - MACINTOSH"

ruby-on-rails - 使用加载命令在 Rails 控制台中调用脚本时传递参数

ruby-on-rails - 使用 token_authenticateable 时,使用多个范围登录的用户设计日志,除了一个之外

ruby-on-rails - 将 Wicked 与 Devise 结合使用(两步注册过程)

ruby-on-rails - 在特定端口上运行Docker容器