[英]How to get the user latitude and longitude in model
我打算在验证当前用户是否位于某个区域后在Rails代码上执行一些ruby。 我的问题是,当使用request.location
值时,我得到的纬度和经度与从Google地图获得的纬度和经度不对应。 还有其他获取用户位置的方法吗? 我想避免使用JavaScript代码,因为在该位置发生某种情况后我需要编辑一个ruby模型,而我已经为此奋斗了一段时间。
顺便说一句,我正在为用户模型使用devise。
我的用户模型具有一个称为signed_in的字段,如果用户仅在一个指定的区域中登录 ,则该字段存储为一个布尔值。
class User < ActiveRecord::Base
def is_at_place(lat, lon)
#place = [-17.792365,-63.182531] #this is the actual place
place = [-17.0000, -63.0000] #this is my home
delta = 0.003000
#latitude range
rlat = (place[0]+delta)..(place[0]-delta)
#longitude range
rlon= (place[1]+delta)..(place[1]-delta)
if rlat.include?(lat) and rlon.include?(lon)
return true
else
return false
end
end
def set_signed_in(latitude, longitude)
if is_at_place(latitude, longitude)
user = User.find(session["warden.user.user.key"][0][0])
user.signed_in = true
user.save
flash.alert = "Succesfully logged in"
else
flash.alert = "Succesfully logged in but as a outside user"
end
end
我将需要将纬度和经度传递给用户模型中的set_signed_in
方法。
我不知道您想要手机还是电脑。
在移动设备上,您将能够使用它并获得准确的位置,在Mac上的计算机上,Mac可以使用wifi来获得更精确的位置,但是大多数计算机却无法。
事实是,如果您的服务器可以从外部使用,这将是一个安全问题,因为位置欺骗很容易。
我猜想这是一个小型个人网站,您可以做的是,自动登录更安全,那就是使用您的连接IP和登录来代替。
还要查看maxmind的geoip数据库,以防浏览器不向您发送标头。 他们有一个基于Web的版本,也可以在本地存储。 还有Teliza和Freegeoip.net。
除非用户身处某个大城市并且对(GPS / AGPS)设置了定位,否则不要期望过高的准确性
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.