2016-04-18 20 views
2

Ich bin sehr neu zu eckig, so dass mein Wissen auf Tutorials basiert und selbst dann ist es nicht erfolgreich. Ich muss mit einem Google-Konto authentifizieren. Das funktioniert, ich bekomme ein Token, mit dem meine api-Anrufe autorisiert werden können. Aber nach dem Login sollte das Popup-Fenster geschlossen werden und ich sollte auf die Homepage weitergeleitet werden. Dies funktioniert nicht.Satellizer dann nicht nach Authentifizierung

das ist mein Controller

angular.module('MyApp').controller('loginController', ['$scope', '$auth', '$location','loginService', loginController]); 

function loginController($scope, $auth, $location, loginService) { 
    $scope.authenticate = function(provider) { 
     $auth.authenticate(provider).then(function(data) { 
      loginService.saveToken(data.data.token); 
      console.log('You have successfully signed in with ' + provider + '!'); 
      $location.path('http://localhost/#/home'); 
     }); 
    }; 
}; 

in app.js ich meine Konfiguration haben. Dies ist nicht meine Arbeit, sondern ein Freund, der wie ich ein Praktikant ist, er ist verantwortlich für eine mobile Anwendung, wo er die gleiche Funktion verwendet, um seinen Token zu bekommen, und es funktioniert.

authProvider.google({ 
      clientId: CLIENT_ID, 
      redirectUri: 'http://localhost:3000/api/users/signIn' 
     }); 
     $authProvider.storage = 'localStorage'; // or 'sessionStorage' 
     $authProvider.loginRedirect = 'http://localhost/#/home'; 

Dies ist der Controller in Knoten, an dem die URL (Google Entwickler-Konsole) umgeleitet wird

router.get('/signIn', function(req, res) { 
    //console.log(req); 
    var code = req.query.code; 
    oauth2Client.getToken(code, function(err, tokens) { 
     if (!err) { 
      https.get("https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=" + tokens.access_token, function(response) { 
       // Continuously update stream with data 
       var body = ''; 
       response.setEncoding('utf8'); 
       response.on('data', function(d) { 
        body += d; 
       }); 

       // Data fetched 
       response.on('end', function() { 
        var parsed = JSON.parse(body); 
        // Check if client_id is from the right app 
        if (parsed.issued_to == '343234242055-vd082vo0o8r8lmfvp1a973736fd98dht.apps.googleusercontent.com') { 
         User.getGoogleId(parsed.user_id, function(err, user) { 
          if (err) { 
           res.status(500).send({ 
            message: 'not authorized app' 
           }); 
          } 

          // No user returned, create one 
          if (!user) { 

           // Request user info 
           oauth2Client.setCredentials(tokens); 
           plus.people.get({ 
            userId: 'me', 
            auth: oauth2Client 
           }, function(err, plusUser) { 
            if (err) res.status(500).send({ 
             message: 'not authorized app' 
            }); 
            else { 

             // Create new user 
             User.create(plusUser.name.givenName, plusUser.name.familyName, (plusUser.name.givenName + "." + plusUser.name.familyName + "@cozmos.be").toLowerCase(), parsed.user_id, function(err, newUser) { 
              if (err) res.status(500).send({ 
               message: 'not authorized app' 
              }); 
              else { 
               res.statusCode = 200; 
               return res.send({ 
                response: 'Success', 
                id: user._id, 
                firstName: user.firstName, 
                lastName: user.lastName, 
                email: user.email, 
                token: tokens.access_token 
               }); 
              } 
             }); 
            } 
           }); 
          } else { 
           // Return user 
           res.statusCode = 200; 
           return res.send({ 
            response: 'Success', 
            id: user._id, 
            firstName: user.firstName, 
            lastName: user.lastName, 
            email: user.email, 
            token: tokens.access_token 
           }); 
          } 
         }); 
        } 

        // if not right app, return unauthorized response 
        else { 
         res.status(500).send({ 
          message: 'not authorized app' 
         }); 
        } 
       }); 
      }); 
     } 
    }); 

}); 

Also ich anmelden, fragte ich die Erlaubnis erhalten, die Anwendung zu geben, meine Kontoinformationen zu verwenden, Ich bekomme eine JSON-Antwort, wo ich meinen Namen, E-Mail und Token sehen kann, und das ist es

Antwort

0

Selbst innerhalb der Firma, wo ich arbeite, konnte niemand eine Antwort finden. Also kam ich selbst mit einer Lösung. Ich benutze keinen Satellizer mehr.

.when('/access_token=:access_token', { 
      template: '', 
      controller: function($window, $http, $location, $rootScope) { 
       var hash = $location.path().substr(1); 

       var splitted = hash.split('&'); 
       var params = {}; 

       for (var i = 0; i < splitted.length; i++) { 
        var param = splitted[i].split('='); 
        var key = param[0]; 
        var value = param[1]; 
        params[key] = value; 
        $rootScope.accesstoken = params; 
       } 
       console.log(params.access_token); 
       var json = { 
        Token: params.access_token 
       }; 
       $window.localStorage['token'] = params.access_token; 
       $http.post('http://localhost:3000/api/users/signIn', json).success(function(data, status) { 
        console.log(data); 
       }).error(function(err) { 
        console.log(err); 
       }); 

       $location.path("/home"); 
      } 

      /*controller: 'createNewsFeed', 
      templateUrl: 'homepage.html'*/ 
     }). 

So umleiten Sie die Seite von selbst. Da die Authentifizierung auf der Backend-Seite funktioniert, kann ich ein Zugriffs-Token bekommen, das ist das einzige, was ich wirklich für die zukünftige Nutzung meiner Rest-API brauche. Ich habe eine Route definiert, bei der mein Browser nach dem Empfang des JSON mit dem Token manuell zu $ ​​window.location weitergeleitet wird. Wenn also diese Seite geladen wird (für den Benutzer nicht sichtbar, wird sie zu schnell angezeigt), analysiere ich das Token, speichere das Token, analysiere die Authentifizierung, wenn das erfolgreich ist, leite ich manuell auf die Homepage um.