谷歌登录按钮出错

时间:2016-07-17 11:32:33

标签: angularjs firebase firebase-authentication google-signin

所以我有这个代码:
HTML:

<html ng-app="MyApp" lang="en">
<head>
    <title ng-controller="MainController" ng-bind="organisation"></title>
    <link ng-controller="MainController" rel="icon" ng-href="{{ logo }}" />
    <script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>
    <script>
      // Initialize Firebase
      var config = {
        apiKey: "AIzaSyD1mVN9oiWvgp6Zdp5e1pKOiLfdXNplcFo",
        authDomain: "testing-environment-98032.firebaseapp.com",
        databaseURL: "https://testing-environment-98032.firebaseio.com",
        storageBucket: "testing-environment-98032.appspot.com",
      };
      firebase.initializeApp(config);
    </script>
    <script src="scripts/angular.min.js"></script>
    <script src="scripts/angular-sanitize.min.js"></script>
    <link rel="stylesheet" href="stylesheets/index.css" />
</head>
    <body ng-controller="MainController" ng-init="initialize()">
        <div id="googleSignIn" ng-style="googleSignInStyle" ng-click="signUserIn()" ng-bind="googleSignInText"></div>
        <span ng-click="signOut()" >Sign Out!</span>
        <article id="scrollSpeedValue" class="valuePasser"><?php echo $scrollSpeed; ?></article>
        <div id="h1-margin">&nbsp;</div>
        <center><span class="h1"><b ng-bind="organisation"></b></span></center>
        <div class="main">
            <span ng-bind-html="generateNavBar(navBar.common, navBar.common[0])"></span>
            <marquee id="EventsMarquee" class="infoBanner" direction="left" scrollamount="10">Events here! Set initial speed to 1000000000</marquee>
            <div class="main-body" id="main-body">
                <center><i>Welcome to the -- site!</i></center><br>
                <div style="width: 48%; float: left;">
                    Description
                </div>
                <div style="width: 48%; float: right;"><iframe src="http://www.google.com" style="width: 99%; height: 373px;"></iframe></div>
            </div>
            <div class="main-body" id="footer-links">
                <center>
                    <a href="#" title="Resources">Resources</a> | <a href="#" title="organisation Resources">organisation Resources</a> | <a href="#" title="link">link</a> | <a href="editable.php" title="Edit!">Edit!</a>
                </center>
            </div>
        </div>
        <footer>
            <br>
        </footer>
        <script src="scripts/app.js"></script>
    </body>
</html>

AngularJS:

var app = angular.module("MyApp", ["ngSanitize"]);

app.controller("MainController", ["$scope", function ($scope){
    $scope.organisation = "Organisation Name";
    $scope.logo = "http://www.weboniks.com/images/logos/logo5.jpg";
    $scope.googleSignInStyle = {};
    $scope.googleSignInText = "";
    $scope.signInVariables = {
        displayName: null,
        email: null,
        uid: null,
        photoURL: null
    }
    $scope.navBar = {
        common: [
            ["Home", "index.html"],
            ["Resources", "index.html"],
            ["Staff Resources", "index.html"],
            [$scope.organisation + " Resources", "index.html"],
            ["Who we are", "index.html"]
        ]
    }
    $scope.signIn = function (){
        var provider = new firebase.auth.GoogleAuthProvider();

        firebase.auth().signInWithPopup(provider).then(function(result) {
            var token = result.credential.accessToken;
            var user = result.user;
            var providerData = user.providerData[0];

            firebase.database().ref('users/' + providerData.displayName).set({Email: providerData.email, PhotoURL: providerData.photoURL, uid: providerData.uid});

        }).catch(function(error) {
            var errorCode = error.code;
            var errorMessage = error.message;
            var email = error.email;
            var credential = error.credential;
            console.log ("Error! Error code: " + errorCode + ", Email: " + email + ", Credential: " + credential + ". That's all we know.");
        });
    }
    $scope.onSignIn = function (){
        var providerData = firebase.auth().currentUser.providerData[0];
        if (providerData.photoURL == null)
        {
            $scope.googleSignInStyle["background"] = "url(../images/img_default_profile.png)";
        }
        else
        {
            $scope.googleSignInStyle["background"] = providerData.photoURL;
        }

        $scope.googleSignInStyle["background-size"] = "100%";
        $scope.googleSignInStyle["background-repeat"] = "no-repeat";
        $scope.googleSignInStyle["border-radius"] = "100%";
        $scope.googleSignInStyle["width"] = "4.5%";
        $scope.googleSignInStyle["height"] = "9%";
        $scope.googleSignInStyle["cursor"] = "default";
    }
    $scope.checkSignIn = function (){
        var user = firebase.auth().currentUser;
        if (user == null)
        {
            setTimeout(function (){ $scope.checkSignIn(); }, 1);
        }
        else
        {
            $scope.onSignIn();
        }
    }
    $scope.signUserIn = function (){
        var user = firebase.auth().currentUser;
        if (user == null)
        {
            $scope.signIn();
            setTimeout(function (){ $scope.checkSignIn() }, 10000);
        }
        else
        {
            $scope.onSignIn();
        }
    }
    $scope.signOut = function (){
        firebase.auth().signOut();
        $scope.googleSignInText = "";
        $scope.googleSignInStyle["background"] = "url(../images/btn_google_signin_dark_normal_web@2x.png)";
        $scope.googleSignInStyle["background-size"] = "100%";
        $scope.googleSignInStyle["background-repeat"] = "no-repeat";
        $scope.googleSignInStyle["border-radius"] = "0%";
        $scope.googleSignInStyle["width"] = "12%";
        $scope.googleSignInStyle["height"] = "6%";
        $scope.googleSignInStyle["cursor"] = "default";
        $scope.googleSignInStyle["cursor"] = "pointer";
    }
    $scope.generateNavBar = function (items, current){
        var navigator = '<nav><ul><b>';
        for (i = 0; i < items.length; i++)
        {
            if (items[i] == current)
            {
                navigator += '<a href="' + items[i][1] + '"><li id="current">' + items[i][0] + '</li></a>';
            }
            else
            {
                navigator += '<a href="' + items[i][1] + '"><li>' + items[i][0] + '</li></a>';
            }
        }

        navigator += '</b></ul></nav>';

        console.log (navigator);
        return navigator;
    }
}]);

此代码应该与谷歌用户签名,然后使用google按钮将登录更改为他们的个人资料图片。它工作正常,唯一的问题是,当您第一次单击登录按钮时,它只会让您登录。然后您必须再次单击它以将按钮更改为用户图像。我做错了吗?

0 个答案:

没有答案