Firebase和Cordova - 使用Facebook的应用凭据进行登录

时间:2014-12-15 12:53:33

标签: cordova firebase facebook-login

我希望能够使用Facebook登录将我的用户登录到Firebase,但是如果他们安装了Facebook应用程序,而无需再次填写他们的信息,只需要获得正确的权限,就像许多本机应用程序一样。有可能吗?

[编辑]

使用官方Facebook插件和NGCordova实施(http://ngcordova.com/docs/#Facebook)我能够使用手机上已有的凭据来记录用户 - 我猜Facebook的应用程序。当然,它没有使用Firebase在我的应用程序上记录用户。我不知道我是否走在正确的道路上......如果我是,我不知道如何搭桥。

[编辑2]

显然,Firebase提供了一个功能来执行此操作:https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-user-authentication-and-management-authwithoauthtokenprovider-credentials-options但是现在我无法使其正常工作。如果我终于找到了解决方案,我会回来分享解决方案。

1 个答案:

答案 0 :(得分:2)

好的,我终于搞定了!如果将来有人需要这个,请按以下步骤操作:

  • 创建Cordova(或Ionic)常规项目
  • 创建一个Facebook应用。你可以在那之后创建一个测试应用程序,以便于测试。
  • 为Facebook添加插件:https://github.com/Wizcorp/phonegap-facebook-plugin并使用想要的安装(在我的情况下安卓,它有点复杂,注意键哈希步骤)。如果你确实使用了Ionic或其他基于Angular的框架,你可能想要使用NGCordova:http://ngcordova.com/docs/#Facebook
  • 如果你使用Facebook测试应用程序,请确保在Android上使用Android密钥填充其字段,并确保使用其应用程序ID,而不是生产用途。
  • 在Firebase上不要忘记填写您的Facebook应用程序的ID和秘密。

然后,点击Facebook登录按钮,使用以下内容:

  • 使用AngularFire:

    app.factory("firebaseRoot", [ function() {
        return "https://<YOUR FIREBASE>.firebaseio.com/";
    }])
    
    app.factory("Auth", ["$firebaseAuth", "firebaseRoot", function($firebaseAuth, firebaseRoot) {
        var ref = new Firebase(firebaseRoot);
        return $firebaseAuth(ref);
    }])
    

在控制器中:

    $scope.fblogin = function() {
        var options = {
            scope: "email,user_friends"
        };

        $cordovaFacebook.login(["public_profile", "email", "user_friends"])
            .then(function(success) {
                console.log(success.authResponse.accessToken);

                Auth.$authWithOAuthToken("facebook", success.authResponse.accessToken).then(function(authData) {
                    console.log("Logged in as:", authData.uid);
                }).catch(function(error) {
                    console.error("Firebase Authentication failed:", error);
                });
            }, function (error) {
                console.log(error);
            });
    };
  • 或纯JS:

    function fblogin() {
    var fbLoginSuccess = function (userData) {
    console.log(userData.authResponse.accessToken);
    
        var ref = new Firebase("https://<YOUR FIREBASE>.firebaseio.com");
        ref.authWithOAuthToken("facebook", userData.authResponse.accessToken, function(error, authData) {
            if (error) {
                console.log("Login Failed!", error);
            } else {
                console.log("Authenticated successfully with payload:", authData);
            }
        });
    }
    
    facebookConnectPlugin.login(["public_profile"],
        fbLoginSuccess,
        function (error) { console.log("" + error) }
    );
    }
    

希望它有所帮助!