javascript - Rails 5:具有设计和 html5 地理定位问题的 Omniauth
问题描述
我正在使用devise
,并且刚刚将该omniauth
功能添加到 Rails 应用程序中。
gem 'omniauth-facebook'
gem 'omniauth-twitter'
gem 'activerecord-session_store'
路线
devise_for :users, controllers: {registrations: 'users/registrations', sessions: 'users/sessions', omniauth_callbacks: "users/omniauth_callbacks"}
设计.rb
config.omniauth :facebook, 'App id', 'App_secret', callback_url: "https://localhost:3000/users/auth/facebook/callback", :scope => 'email', info_fields: 'email, name'
config.omniauth :twitter, 'app_id', 'App_secret', callback_url: "https://localhost:3000/users/auth/twitter/callback"
用户.rb
devise :database_authenticatable, :registerable, :recoverable, :timeoutable, :rememberable,
:validatable, :trackable, :lockable, :omniauthable, :omniauth_providers => [:facebook, :twitter], :authentication_keys => {email: true}
def self.create_from_facebook_data(facebook_data)
where(provider: facebook_data.provider, uid: facebook_data.uid).first_or_create do | user |
user.email = facebook_data.info.email
user.name = facebook_data.info.name
user.image = facebook_data.info.image
user.password = Devise.friendly_token[0, 20]
end
end
def self.create_from_twitter_data(twitter_data)
where(provider: twitter_data.provider, uid: twitter_data.uid).first_or_create do | user |
user.email = twitter_data.info.email
user.name = twitter_data.info.nickname
user.image = twitter_data.info.image
user.password = Devise.friendly_token[0, 20]
end
end
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
# facebook callback
def facebook
@user = User.create_from_facebook_data(request.env['omniauth.auth'])
if @user.persisted?
sign_in_and_redirect @user
set_flash_message(:notice, :success, kind: 'Facebook') if is_navigational_format?
else
flash[:error] = 'There was a problem signing you in through Facebook. Please register or try signing in later.'
redirect_to new_user_registration_url
end
end
# twitter callback
def twitter
@user = User.create_from_twitter_data(request.env['omniauth.auth'])
if @user.persisted?
sign_in_and_redirect @user
set_flash_message(:notice, :success, kind: 'Twitter') if is_navigational_format?
else
flash[:error] = 'There was a problem signing you in through Twitter. Please register or try signing in later.'
redirect_to new_user_registration_url
end
end
def failure
flash[:error] = 'There was a problem signing you in. Please register or try signing in later.'
redirect_to new_user_registration_url
end
end
我可以使用社交媒体帐户登录,到目前为止一切正常,但我注意到一个错误,我无法弄清楚是什么原因造成的。
我正在使用 html5 地理位置来获取用户的位置,然后根据该位置进行搜索。此外,为了使用和允许访问 html5 地理位置,我必须实现这个。
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(setGeoCookie, displayError);
} else {
alert("Geolocation is not supported by this browser.");
}
}
function setGeoCookie(position) {
var cookieName = "lat_lng";
var now = new Date();
var time = now.getTime();
time += 3600 * 5000;
now.setTime(time);
var cookie_val = position.coords.latitude + "|" + position.coords.longitude;
document.cookie = cookieName +"=" + cookie_val + '; expires=' + now.toUTCString() + '; path=/';
$("#search-form").trigger('submit.rails');
}
function displayError(error) {
var errors = {
1: 'You need to click on allow.',
2: 'Position unavailable',
3: 'Request timeout'
};
alert("Error: " + errors[error.code]);
location.reload();
}
现在,当我尝试在 localhost 中使用 safari 浏览器进行测试时,会发生这种奇怪的事情......如果我使用 twitter 或 Facebook 登录,2: 'Position unavailable'
当我尝试执行搜索时会弹出错误。如果我用谷歌登录一切正常。仅当我使用 safari 并使用 twitter 或 Facebook 登录时,才会出现此问题,如果我使用 firefox,它就可以正常工作。
有什么想法可能在 safari 和 localhost 中导致此问题,以及我该如何解决?
解决方案
推荐阅读
- sql - 函数调用转换的本机查询问题
- ajax - 在jsp中的ajax调用中以JSON形式接收响应
- mysql - Mysql 如何使用 UTF8 字符集将列添加为 varchar(21884)?
- javascript - 页面加载时从浏览器打开 android 应用
- sql - 如何根据指示重复的列创建重复记录
- scala - 迭代数据框并在 Spark SQL 语句中使用这些值
- javascript - jquery select html 不包含选择标签
- angular - 在同一文件中的另一个组件中使用一个组件的变量
- javascript - 像翻页一样反应滚动或滚动一次一定量
- javascript - 如何检查 React Native Elements Native Props