每次使用 Rails 3 中的 Devise 登录时,如何检查用户帐户?

Posted

技术标签:

【中文标题】每次使用 Rails 3 中的 Devise 登录时,如何检查用户帐户?【英文标题】:How do I run a check on a user's account every time they login using Devise in Rails 3? 【发布时间】:2011-08-05 20:14:38 【问题描述】:

我正在使用 Devise,当有人登录时,我想执行自定义方法。

类似于在更新/保存帐户/模型之前使用before_save 执行方法,或者在最初创建对象之前使用before_create 执行相同操作。

我也想这样做,但对于登录的用户。

我该怎么做?

【问题讨论】:

【参考方案1】:

在您的application_controller.rb 中添加以下代码:

  def after_sign_in_path_for(resource)
    execute_custom_function()
    super
  end

您可以使用Devise's Controller Helper。

【讨论】:

我试过这个 Mike:if (current_user.has_trial_expired?) redirect_to(:settings),但现在我收到一个错误:AbstractController::DoubleRenderError in Devise/sessionsController#create Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return". 想知道是什么原因造成的? 这是因为这个方法期望你返回一个路由,但是你正在重定向并且调用这个方法的代码也在重定向。如果您查看链接的示例,您可以看到他们如何访问正在传递的用户对象。我强烈建议做这样的事情。 所以你可能想要: if resource.is_a?(User) && resource.hash_trial_expired?设置路径 嗯...只需添加return url_for(:settings) 即可。但我会尝试你的其他建议。 顺便说一句,你的解决方案也有效......我想它会更好,如果我将来将设计用于用户以外的模型。所以我保留它。谢谢:)

以上是关于每次使用 Rails 3 中的 Devise 登录时,如何检查用户帐户?的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 如何覆盖设计SessionsController以在用户登录时执行特定任务?

rails+devise+cancancan+rolify注册登录多角色权限管理

如何从 Rails 控制台使用 Devise 登录用户?

Rails 3 获取请求引用者

Devise for Rails中的唯一用户名

Rails & Devise:如何在没有布局的情况下呈现登录页面?