我打算在验证当前用户是否位于某个区域后,在rails代码上执行一些ruby。我的问题是,当使用request.location
值时,我获得的纬度和经度与我从谷歌地图中获得的纬度和经度不符。 有没有其他方法可以获取用户位置?我想避免使用javascript代码,因为我需要在某个条件下编辑一个ruby模型并且我已经和它争吵了一段时间。
BTW,我正在使用设计用户模型。
我的用户模型有一个名为 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
方法。
答案 0 :(得分:1)
我不知道你是想把它用于手机还是电脑。
在移动设备上,您可以使用它并准确定位,在计算机上,Mac可以使用wifi来获得更精确的位置,但大多数计算机都不会。
问题是,如果您的服务器在外部可用,则会出现安全问题,因为位置欺骗很容易。
我猜这是一个小型的个人网站,你可以做的事情是自动登录更安全,就是使用你的连接IP并以此为基础登录。
答案 1 :(得分:1)
另请查看maxmind的geoip数据库,以防浏览器不向您发送标题;他们有一个基于网络的版本,也可以在本地存储。还有Teliza和Freegeoip.net。
除非用户位于某个拥有定位设施的大城市(GPS / AGPS),否则不要期望太高的准确性