Firebase - getRedirectResult无法在Cordova浏览器中运行

时间:2017-08-26 16:32:58

标签: javascript cordova firebase firebase-authentication facebook-login

我已将Firebase设置为我的Cordova应用程序以通过Facebook进行身份验证,因为我找到了解决方法,因此可以在Android中正常运行。但是,在我的浏览器中,我无法使其正常工作。

问题:一旦我调用BTNode方法将其重定向到firebase并正确登录(在firebase的仪表板上检查),然后它重定向到我的localhost:8000但它永远不会在signInWithRedirect(provider)方法中停止。 / p>

未显示控制台日志错误。

我的应用设置:

的index.html

getRedirectResult()

app.js

<script src="https://www.gstatic.com/firebasejs/4.3.0/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.1.1/firebase-auth.js"></script>

login_controller.js

 var config = {
            apiKey: "*********",
            authDomain: "*********",
            databaseURL: "*********",
            projectId: "*********",
            storageBucket: "*********",
            messagingSenderId: "*********"
          };
firebase.initializeApp(config);

Firebase配置

添加了localhost域名

网络环境设置

Facebook身份验证设置

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我这样设置(它与我写的plugin交织在一起):

当确定用户未登录时,将调用此方法:

toggleWebViewWithAuth: function () {
    var win = function(d) {
        console.log("web view toggled, going to auth");

        auth.presentLogin().then(function() {
            auth.getResult();
        });
    };
    var fail = function(e) {
        console.log(e)
    }

    cordova.exec(win, fail, "NavigationPlugin", "toggleWebView", []);
}

auth.presentLogin是我制作的async函数,看起来像这样:

presentLogin: async function () {
    var provider = new firebase.auth.FacebookAuthProvider();
    //provider.addScope('default');
    provider.addScope('email');
    //provider.addScope('pages_show_list');

    return firebase.auth().signInWithRedirect(provider);
},

auth变量中也是:

getResult: function () {
    firebase.auth().getRedirectResult().then(function(result) {

        if (result.credential) {
            // This gives you a Facebook Access Token. You can use it to access the Facebook API.
            var token = result.credential.accessToken;
            // ...
        }

        // The signed-in user info.
        app.user = result.user;

        console.log("result.user in presentLogin:", app.user);
    }).then(function() {
        //iosNav.getCurrentTabControllerName();
        iosNav.toggleWebView();
    }).catch(function(error) {
        // Handle Errors here.
        var errorCode = error.code;
        var errorMessage = error.message;
        alert("Error:", error);

        // The email of the user's account used.
        var email = error.email;
        // The firebase.auth.AuthCredential type that was used.
        var credential = error.credential;
        // ...
    });
}

因此,现在返回并阅读我发布的toggleWebViewWithAuth方法,您将看到我的用法。这样可以使getRedirectWithResult等待signInWithRedirect。所有这些都可以在插件外部进行配置(无需使用cordova.exec,iOS端的所有方法都是打开或关闭UIWebView)-最重要的部分是您只需要确保使用我的presentLogin方法来呈现它,并在getResult块中调用then

另外,对于js导入,firebase-app和所有firebase模块js文件,都使用全局firebase.js导入替换。您只需要:

<script>.../firebase-app.js</script>
<script>.../firebase-auth.js</script>