我正在将我的项目与facebook auth登录集成,我想在IOS上支持Chrome。我注意到在这种情况下我必须同时处理authWithOAuthPopup和authWithRedirect(firebase user-auth)。但Chrome IOS目前不支持Popup身份验证。
我简化了我的代码,并展示了它在IOS上如何在Chrome中运行
var rootRef = new Firebase('https://docs-sandbox.firebaseio.com/web/uauth');
rootRef.onAuth( function(authData){
alert('getAuth');
alert(authData);
console.log(authData);
});
$('#login').on('click', function(e){
rootRef.authWithOAuthPopup("facebook", function(err, authData){
if(err && err.code === 'TRANSPORT_UNAVAILABLE'){
rootRef.authWithOAuthRedirect("facebook", function(err, authData){
if(authData){
alert('redirect');
alert(authData);
}
})
}
})
});
点击此处http://jsfiddle.net/blackbing/zjunuzec/5/了解更多详情。
适用于Safari IOS。如果登录成功,它将提醒[对象],但它在IOS上的Chrome中显示为空。
任何想法?
答案 0 :(得分:3)
我认为我弄清楚问题是什么。
首先,据说getAuth在文档中是同步的,但在authWithOAuthRedirect上同步是不可靠的。所以当页面重定向到原始页面时。我无法获取authData,因此无法确定用户是否已登录。 (但实际上用户已登录)。 其次,因为回调" authWithOAuthRedirect"无法调用,回调函数无论如何都无法获取authData。如果发生错误就可以调用它,对吧?我建议注意文档中的这种行为。
无论如何:我认为文档中的代码片段必须更正: https://www.firebase.com/docs/web/guide/user-auth.html#section-popups
authWithFunction中的回调用于处理错误,不建议处理authData,onAuth是获取authData的更好方法。我在我的要点[https://gist.github.com/blackbing/f77d04cbed4b0059af2e]
上更新了一个片段var ref = new Firebase("https://<your-firebase>.firebaseio.com");
rootRef.onAuth( function(authData){
//It is a better way to get authData instead of get from auth callback function
console.log(authData);
});
// prefer pop-ups, so we don't navigate away from the page
// auth callback is to handle if occur error
ref.authWithOAuthPopup("google", function(err) {
if (err) {
if (err.code === "TRANSPORT_UNAVAILABLE") {
// fall-back to browser redirects, and pick up the session
// automatically when we come back to the origin page
ref.authWithOAuthRedirect("google", function(err) { ... });
}
}
});
顺便说一句,我发现了一个类似的问题https://stackoverflow.com/a/26416696/797411,解决方法并不好,但我认为我们遇到了同样的问题。