Javascript Parse.FacebookUtils.logIn是否只允许通过弹出框登录Facebook?
我正在尝试使用parse.com Facebook SDK允许我的用户使用Fb登录按钮登录我的网站 我可以在桌面浏览器和Safari上正常工作,但ios Chrome存在一个已知的问题,导致了所讨论的错误 通过调查,我得出结论,导致Facebook弹出窗口打开的是Javascript Parse.FacebookUtils.logIn是否只允许通过弹出框登录Facebook?,javascript,jquery,google-chrome,facebook-graph-api,parse-platform,Javascript,Jquery,Google Chrome,Facebook Graph Api,Parse Platform,我正在尝试使用parse.com Facebook SDK允许我的用户使用Fb登录按钮登录我的网站 我可以在桌面浏览器和Safari上正常工作,但ios Chrome存在一个已知的问题,导致了所讨论的错误 通过调查,我得出结论,导致Facebook弹出窗口打开的是Parse.FacebookUtils.logIn类,对吗 如果是这样,是否不可能将其作为页面而不是弹出窗口打开?这将避免上述错误 我已经构建了一个解决方案,它适用于标准的Facebook登录,但不适用于解析。不确定是否可以使用这个?这
Parse.FacebookUtils.logIn
类,对吗
如果是这样,是否不可能将其作为页面而不是弹出窗口打开?这将避免上述错误
我已经构建了一个解决方案,它适用于标准的Facebook登录,但不适用于解析。不确定是否可以使用这个?这项工作的信息来自
我也看到Rahul的答案是一个潜在的解决方案,但我不确定如何实现它
任何帮助都会得到感激的,因为我已经被困在这个问题上很久了
function getUserData() {
FB.api('/me', function(response) {
document.getElementById('response').innerHTML = 'Hello ' + response.name;
});
}
window.fbAsyncInit = function() {
//SDK loaded, initialize it
Parse.FacebookUtils.init({
appId : '12345',
xfbml : true,
version : 'v2.3'
});
//check user session and refresh it
var uri = encodeURI('http://mysite123.com/user_home.html');
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
//user is authorized
document.getElementById('loginBtn').style.display = 'none';
getUserData();
} else {
//user is not authorized
}
});
};
//load the JavaScript SDK
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
//add event listener to login button
document.getElementById('loginBtn').addEventListener('click', function() {
var ABSOLUTE_URI = "http://mysite123.com/user_home.html";
var FB_ID = "12345";
// Open your auth window containing FB auth page
// with forward URL to your Opened Window handler page (below)
var redirect_uri = "&redirect_uri=" + ABSOLUTE_URI;
var scope = "&scope=public_profile,email,user_friends";
var url = "https://www.facebook.com/dialog/oauth?client_id=" + FB_ID + redirect_uri + scope;
// notice the lack of other param in window.open
// for some reason the opener is set to null
// and the opened window can NOT reference it
// if params are passed. #Chrome iOS Bug
window.open(url);
function fbCompleteLogin(){
Parse.FacebookUtils.logIn(null, {
success: function(user) {
if (!user.existed()) {
alert("User signed up and logged in through Facebook!");
} else {
alert("User logged in through Facebook!");
}
},
error: function(user, error) {
alert("User cancelled the Facebook login or did not fully authorize.");
}
});
}
function requireLogin(callback){
FB.getLoginStatus(function(response) {
if (response.status != "connected"){
showLogin();
}else{
checkAuth(response.authResponse.accessToken, response.authResponse.userID, function(success){
// Check FB tokens against your API to make sure user is valid
});
}
});
}
}, false);
我以前也遇到过同样的问题,并且解决了它。如果不想弹出新窗口,请使用OAuth登录facebook 您可以使用来快速完成此操作。这样做之后,只需简单地使用hyperlink,也许它会对您有所帮助(对不起,这些帖子是用中文繁体字描述的) 更新:
我创建了一个,请检查。如果你想自己控制登录过程,你必须绕过一些解析部分。 我的建议是使用FBAPI登录Facebook,您可以自定义FBAPI 之后,您将从facebook获得一个对象,其中包含一些信息,如token、expireDate等。。。可以将此对象提供给Parse.FacebookUtils.logIn方法,以便将Facebook帐户链接到Parse帐户 这是cordova的一个片段,可能需要做一些调整
$cordovaFacebook.getLoginStatus().then(function(rep){
console.log(JSON.stringify(rep));
var expDate = new Date(new Date().getTime() + rep.authResponse.expiresIn * 1000 ).toISOString();
var authData = {
id: String(rep.authResponse.userID),
access_token: rep.authResponse.accessToken,
expiration_date: expDate
}
return Parse.FacebookUtils.logIn(authData);
})
我要睡觉了(UTC 23:48+8)。如果明天有时间,我将发布一个简单的示例。看起来很有希望-稍后会有一个很好的了解,所以这使用了嵌入式javascript?我是否需要对我的文件或后端进行任何附加设置以使其正常工作?或者我只是把文件放到我现有的文件结构中?它使用node.js作为解析后端。要设置它,请参阅GitHub中的步骤。好的,我可以设置云部件和应用程序,并将其与已存储在我自己的服务器上的现有js代码一起运行吗?是的,请参阅,您可以按照步骤在后端服务器中使用另一种语言来执行此操作。