Ubicación de almacenamiento de inicio de sesión en la base de mi aplicación rieles

votos
0

Cuando inicio sesión en la aplicación, el código de abajo se llama. Así que dentro de la SessionsController, mesa SignupHistory se rellena con el .createmétodo.

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  helper_method :current_user
  before_action :set_timezone, :current_country

  def current_country
    if session[:ip_country_code].present?
      return @current_country = session[:ip_country_code]
    end
    use_default = request.location.nil? || request.location.country_code.blank? || request.location.country_code == 'RD'
    country_code = use_default ? ENV['DEFAULT_IP_COUNTRY_CODE'] : request.location.country_code
    @current_country = session[:ip_country_code] = country_code
  end
end

sessions_controller.rb

class SessionsController < ApplicationController
  def save_signup_history(member_id)
    SignupHistory.create(
      member_id: member_id,
      ip: request.ip,
      accept_language: request.headers[Accept-Language],
      ua: request.headers[User-Agent],
      login_location: request.location
    )
  end
end

atributos de base de datos

dATABSE

Sin embargo, en lugar de la línea login_location: request.locationpara escribir la ubicación de la propiedad intelectual en la firma en la base de datos como New York, lo que me pasa en la base de datos es:

! --- rubí / objeto: Geocoder :: Resultado :: Ipstack datos: IP: 127.0.0.1 COUNTRY_NAME: country_code Reservado: RD cache_hit:

¿Cómo se guarda la ubicación basada en la IP de acceder a mi base de datos

Publicado el 11/09/2018 a las 18:25
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Se puede utilizar request.remote_ippara obtener la dirección IP. Para obtener la ubicación de la dirección IP guardada en la base de datos, puede utilizar uno de los servicios gratuitos de API que recuperan información de localización basada en IP:
- http://ip-api.com/
- https://www.iplocation.net/
- etc ..

class SessionsController < ApplicationController

  require 'net/http'
  require 'json'

  def save_signup_history(member_id)
    SignupHistory.create(
        member_id: member_id,
        ip: request.ip,
        accept_language: request.headers["Accept-Language"],
        ua: request.headers["User-Agent"],
        login_location: get_address(request.remote_ip)
    )
  end


#http://ip-api.com/json/208.80.152.201
  def get_address(ip)
    url = "http://ip-api.com/json/#{ip}"
    uri = URI(url)
    response = Net::HTTP.get(uri)
    result = JSON.parse(response)
    result["regionName"] # returns region name 
  end
end

Respuesta JSON:

{
"as":"AS14907 Wikimedia Foundation, Inc.",
"city":"San Francisco (South Beach)",
"country":"United States",
"countryCode":"US",
"isp":"Wikimedia Foundation, Inc.",
"lat":37.787,
"lon":-122.4,
"org":"Wikimedia Foundation, Inc.",
"query":"208.80.152.201",
"region":"",
"regionName":"California",
"status":"success",
"timezone":"America/Los_Angeles",
"zip":"94105"
}

Referencia:
https://apidock.com/rails/ActionController/Request/remote_ip

Respondida el 11/09/2018 a las 21:10
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more