Rails:如何跟踪用户上次登录的IP地址?

时间:2017-03-06 15:18:55

标签: ruby-on-rails

我如何跟踪已签名用户的最后一个IP地址而不是当前用户,因为我确信可以通过

来实现
@ip = request.remote_ip

3 个答案:

答案 0 :(得分:1)

存储当前用户的IP地址是您访问上一个用户的IP地址的方式。如果您为每个会话记录了登录人员的IP地址,您最终将记录所有已登录的用户。要获取最后一个用户的IP地址,只需查询最后一条记录即可加入。

一个简单的解决方案是创建一个包含一列的表,并随时添加。

以下是迁移文件的样子。

class CreateUserIp < ActiveRecord::Migration[5.0]
  def change
    create_table :user_ip do |t|
      t.string :ip_address

      t.timestamps
    end
  end
end

务必从终端

运行迁移
rails db:migrate

现在,每次用户登录时,您都可以为每个会话将当前IP地址插入表中。

UserIp.create(ip_address: request.remote_ip)

现在您可以检索最新的记录,

last_users_ip = UserIp.order(created_at: :asc).reverse_order.limit(10).reverse.first
你去吧!

答案 1 :(得分:1)

使用Devise gem进行身份验证(如果还不熟悉的话)。它提供开箱即用的IP tracking

答案 2 :(得分:0)

最好使用request.remote_ip这个简单而且有效。

class ApplicationController < ActionController::Base
      def remote_ip
        if request.remote_ip == '127.0.0.1'
          # Hard coded remote address
          '123.45.67.89'
        else
          request.remote_ip
        end
      end
    end

    class MyController < ApplicationController
      def index
        @client_ip = remote_ip()
      end
    end

当您在本地访问某个网站时,您来自本地IP地址,即127.0.0.1。

您正在做的是访问者IP地址的正确方式,您看到的结果与预期一致。

您想要使用

@ip = request.remote_ip

因为这考虑了大多数反向代理和其他情况,您可能会遇到request.env['REMOTE_ADDR']可能为零或本地代理的地址。