Enregistrer sa position de connexion dans la base de données de mon application rails

voix
0

Quand je signe dans l'application, le code ci - dessous est appelé. Ainsi , à l' intérieur du SessionsController, table SignupHistory se rempli avec la .createméthode.

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

attributs de base de données

databse

Cependant, au lieu de la ligne login_location: request.locationd'écrire l'emplacement de la propriété intellectuelle connectez- vous dans la base de données telles que New York, ce que je reçois dans la base de données est:

! --- rubis / objet: géocodage :: Résultat :: données Ipstack: ip: 127.0.0.1 country_name: country_code Réservé: RD cache_hit:

Comment puis-je enregistrer l'emplacement en fonction de la propriété intellectuelle connectez-vous dans ma base de données

Créé 11/09/2018 à 18:25
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Vous pouvez utiliser request.remote_ippour obtenir l'adresse IP. Pour obtenir l'emplacement de l' adresse IP enregistrée dans DB, vous pouvez utiliser l' un des services de l' API libres qui vont chercher des informations de localisation basé sur 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

Réponse 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"
}

Référence:
https://apidock.com/rails/ActionController/Request/remote_ip

Créé 11/09/2018 à 21:10
source utilisateur

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