我无法通过在IOS上使用Chrome的authWithOAuthRedirect来获取authData

时间:2014-12-09 04:33:26

标签: javascript ios google-chrome firebase

我正在将我的项目与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中显示为空。

任何想法?

1 个答案:

答案 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,解决方法并不好,但我认为我们遇到了同样的问题。