rails设计挂钩到on_login

时间:2011-11-01 18:02:04

标签: ruby-on-rails devise ruby-on-rails-3.1

我想在登录/会话创建后挂钩设计。我该怎么做呢?

基本上我想在每次登录时设置一个用户位置,为此我需要一个登录后的挂钩。

3 个答案:

答案 0 :(得分:8)

Devise建立在Warden之上,所以你可以使用Warden的after_authentication钩子。

将它放在初始值设定项中:

Warden::Manager.after_authentication do |user,auth,opts|
  # do something with user
end

远程IP地址和其他请求信息存储在auth.request(即auth.request.remote_ip)中。

请参阅https://github.com/hassox/warden/wiki/callbacks

答案 1 :(得分:4)

设计成功登录后,设计更新user.current_sign_in_at时间戳的值。因此,您只需向用户模型添加before_save过滤器即可。在该过滤器中,检查此字段的值是否已更改,如果已更改,请设置用户位置。

BTW - 我不确定你所说的“位置”是什么意思 - 如果你的意思是IP地址,Devise已经为你存储了这些。

答案 2 :(得分:0)

以下是设计维基的页面:How To: Redirect to a specific page on successful sign in

总之,建议将以下方法添加到应用程序控制器:

  

应用程序/控制器/ application_controller.rb

def after_sign_in_path_for(resource)
    custom_location_for(resource) || welcome_path
end

在上面的代码中,resource表示您已实现的对象(用户,帐户等)为其设计身份验证。 (路径中包含devise_for的对象。)