如何使用Devise和Ruby on Rails记录用户注册的IP地址?

时间:2014-01-22 05:07:24

标签: ruby-on-rails devise

我尝试了以下内容:

user.rb

before_create :record_sign_up_ip

protected
def record_sign_up_ip
  self.sign_up_ip = current_sign_in_ip
end

很遗憾,虽然current_sign_in_ip的正确本地IP为127.0.0.1,但sign_up_ip仍为nil。如何轻松获取有人注册的IP?通常我会把它放在create控制器中,但是对于Devise,没有User的控制器。

2 个答案:

答案 0 :(得分:3)

覆盖Devise使用的控制器,如Override devise registrations controller

所述

从该帖子修改后,创建app / controllers / users / registrations_controller.rb:

# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  def create
    params['user']['sign_up_ip'] = request.env['REMOTE_ADDR']   
    super
  end

end 

也从该帖子修改,使用该控制器:

# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "users/registrations"}

您还需要使sign_up_up可访问(对于Rails 3):

# app/models/user.rb
  attr_accessible :sign_up_ip

答案 1 :(得分:0)

在您的用户模型中

def init
    self.sign_up_ip = current_sign_in_ip
end