繁体   English   中英

Rails / Devise:自动登录后执行操作

[英]Rails/Devise: execute action after automatic login

编辑:我使用Devise 3.4.1,而after_remembered不可用。 应用此小补丁或使用2014/11/09之后发布的较新版本。

好吧,所以我对Rails环境很新,我觉得我错过了什么。

我希望在登录后执行特定操作,无论是从表单登录还是自动登录后。

我发现after_sign_in_path_for是在“常规”登录后执行的。 我已经在我的应用程序控制器中使用它。

class ApplicationController < ActionController::Base

[…]

def after_sign_in_path_for(resource)
    myAction
end

但是,当用户通过“设计记住”选项登录时,似乎不会调用此方法。

我发现在用户自动登录后执行了after_remembered ,但是我不明白如何使用它。 我不想修改Devise gem只是为了将我的动作添加到方法中,以下似乎不起作用:

class ApplicationController < ActionController::Base

[…]

def after_remembered()
    myAction
end

我在这里不知所措。 要么我不明白如何使用after_remembered,要么我以错误的方式看待它并且有另一种解决方案(如果它涵盖两种情况或只有“记住我”自动登录的情况,对我来说没问题) 。 有没有人有任何想法使它工作?

PS:我正在开发一个我自己没有开发的应用程序。 如果您觉得需要更多代码才能回答,请告诉我,我将编辑我的帖子。

它是Rememberable模块的一部分,因此它属于您的模型...假设您的资源是User ,您将使用它的方式是......

class User < ActiveRecord::Base

  devise :rememberable

  def after_remembered
    # (your code here)
  end

end

我不确定Devise是否提供特定于控制器的方法,但如果不是,你可以抛出一个togeter ...在你的用户模型中创建一个名为,例如, signed_in_via_remembered

class User < ActiveRecord::Base

  devise :rememberable

  def after_remembered
    update_attribute(:signed_in_via_remember, true)
  end

end

然后在你的application_controller.rb中

class ApplicationController < ActionController::Base

  before_action :handle_sign_in_via_rememberable

  def handle_sign_in_via_rememberable
    if current_user and current_user.signed_in_via_remember?
      current_user.update_attribute(:signed_in_via_remember, false)    
      after_sign_in_path_for(User)
    end
  end

  def after_sign_in_path_for(resource)
    myAction
  end

end

有人可能有一个更整洁的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM