Rails/Devise: 自动登录后执行动作
Rails/Devise: execute action after automatic login
编辑:我使用 Devise 3.4.1,after_remembered 不可用。应用 this small patch 或使用 2014/11/09 之后发布的较新版本。
好的,所以我对 Rails 环境比较陌生,我觉得我缺少一些东西。
我希望在登录后执行特定操作,无论是从表单登录还是自动登录后。
我发现 after_sign_in_path_for 在 "regular" 登录后执行。我已经在我的应用程序控制器中使用它了。
class ApplicationController < ActionController::Base
[…]
def after_sign_in_path_for(resource)
myAction
end
但是,当用户通过 Devise Remember 选项登录时,似乎不会调用此方法。
我发现after_remembered是在用户自动登录后执行的,但是我不明白如何使用它。我不想修改 Devise gem 只是为了将我的操作添加到方法中,以下似乎不起作用:
class ApplicationController < ActionController::Base
[…]
def after_remembered()
myAction
end
我在这里不知所措。要么我不明白如何使用 after_remembered,要么我看错了,还有另一种解决方案(它应该涵盖两种情况还是只涵盖 "remember me" 自动登录的情况,对我来说很好)。有谁知道如何让它发挥作用吗?
PS:我正在开发一个不是我自己开发的应用程序。如果您觉得需要更多代码才能回答,请告诉我,我会编辑我的 post.
它是 Rememberable
模块的一部分,因此它属于您的模型...假设您的资源是 User
您使用它的方式是...
class User < ActiveRecord::Base
devise :rememberable
def after_remembered
# (your code here)
end
end
我不确定 Devise 是否提供了特定于控制器的方法,但如果没有,您可以一起使用...在您的用户模型中创建一个名为 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
有人可能有更简洁的解决方案。
编辑:我使用 Devise 3.4.1,after_remembered 不可用。应用 this small patch 或使用 2014/11/09 之后发布的较新版本。
好的,所以我对 Rails 环境比较陌生,我觉得我缺少一些东西。
我希望在登录后执行特定操作,无论是从表单登录还是自动登录后。
我发现 after_sign_in_path_for 在 "regular" 登录后执行。我已经在我的应用程序控制器中使用它了。
class ApplicationController < ActionController::Base
[…]
def after_sign_in_path_for(resource)
myAction
end
但是,当用户通过 Devise Remember 选项登录时,似乎不会调用此方法。
我发现after_remembered是在用户自动登录后执行的,但是我不明白如何使用它。我不想修改 Devise gem 只是为了将我的操作添加到方法中,以下似乎不起作用:
class ApplicationController < ActionController::Base
[…]
def after_remembered()
myAction
end
我在这里不知所措。要么我不明白如何使用 after_remembered,要么我看错了,还有另一种解决方案(它应该涵盖两种情况还是只涵盖 "remember me" 自动登录的情况,对我来说很好)。有谁知道如何让它发挥作用吗?
PS:我正在开发一个不是我自己开发的应用程序。如果您觉得需要更多代码才能回答,请告诉我,我会编辑我的 post.
它是 Rememberable
模块的一部分,因此它属于您的模型...假设您的资源是 User
您使用它的方式是...
class User < ActiveRecord::Base
devise :rememberable
def after_remembered
# (your code here)
end
end
我不确定 Devise 是否提供了特定于控制器的方法,但如果没有,您可以一起使用...在您的用户模型中创建一个名为 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
有人可能有更简洁的解决方案。