Αποθήκευση θέσης σύνδεσης στη βάση δεδομένων των σιδηροτροχιών εφαρμογής μου

ψήφοι
0

Όταν συνδεθείτε στην εφαρμογή, η παρακάτω κωδικό παίρνει ονομάζεται. Έτσι, μέσα στο SessionsController, SignupHistory τραπέζι παίρνει συμπληρωθεί με τη .createμέθοδο.

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

χαρακτηριστικά της βάσης δεδομένων

databse

Ωστόσο, αντί της γραμμής login_location: request.locationγια να γράψετε τη θέση της ΠΕ συνδεθείτε στη βάση δεδομένων, όπως New York, τι έχω στη βάση δεδομένων είναι:

--- ρουμπίνι / αντικείμενο: Geocoder :: Αποτελέσματα :: Ipstack στοιχεία: ip: 127.0.0.1 COUNTRY_NAME: Reserved COUNTRY_CODE: RD cache_hit:

Πώς μπορώ να αποθηκεύσετε θέση με βάση την IP συνδεθείτε στη βάση δεδομένων μου

Δημοσιεύθηκε 11/09/2018 στις 18:25
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Μπορείτε να χρησιμοποιήσετε request.remote_ipγια να πάρει τη διεύθυνση IP. Για να πάρετε τη θέση της διεύθυνσης IP αποθηκεύονται στο ΣΠ, μπορείτε να χρησιμοποιήσετε μία από τις δωρεάν υπηρεσίες API που φέρω πληροφορίες θέσης με βάση την IP:
- http://ip-api.com/
- https://www.iplocation.net/
- και τα λοιπα..

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

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"
}

Παραπομπή:
https://apidock.com/rails/ActionController/Request/remote_ip

Απαντήθηκε 11/09/2018 στις 21:10
πηγή χρήστη

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