Benim raylar app veritabanına giriş konumlarını kaydetme

oy
0

Ben uygulamaya oturum açtığınızda, aşağıdaki kod çağrılır. Yani SessionsController içinde SignupHistory tablo doldurulur alır .createyöntemiyle.

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

veritabanı nitelikleri

databse

Ancak, bunun yerine hattın login_location: request.locationgibi veritabanına oturum açarak IP yerini yazmak için New Yorkne veritabanında olsun,:

! --- yakut / nesne: Geocoder :: Sonuç :: Ipstack veriler: ip: 127.0.0.1 country_name: Ayrılmış COUNTRY_CODE: RD cache_hit:

Benim veritabanına oturum açarak IP'ye göre konumu kaydetmek nasıl

Oluştur 11/09/2018 saat 18:25
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

Sen kullanabilirsiniz request.remote_ipIP adresini alır. DB kaydedilen IP adresinin yerini almak için, IP tabanlı konum bilgileri alıp ücretsiz API hizmetlerinden birini kullanabilirsiniz:
- http://ip-api.com/
- https://www.iplocation.net/
- vb..

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 Yanıtı:

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

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

Cevap 11/09/2018 saat 21:10
kaynak kullanıcı

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