卫星然后authentication后不叫

我对angular度很陌生,所以我的知识是基于教程,即使如此,我也不成功。 我需要使用Google帐户进行身份validation。 这工作,我得到一个令牌,我的API调用可以授权。 但login后popup窗口应该解雇,我应该被redirect到主页。 这不起作用。

这是我的控制器

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'); }); }; }; 

在app.js我有我的configuration。 这不是我的工作,而是一个实习生和我一样的朋友,他负责一个移动应用程序,在这个应用程序中,他使用相同的function来获得他的令牌,并且工作正常。

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

这是url被redirect到的节点中的控制器(谷歌开发者控制台)

 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' }); } }); }); } }); }); 

所以我login,我被要求给应用程序使用我的帐户信息的权限,我得到一个JSON响应,我可以看到我的名字,电子邮件和令牌,就是这样

即使在我工作的公司内,也没有人能find答案。 所以我自己来了一个解决scheme。 我不再使用卫星。

  .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'*/ }). 

所以redirect页面本身。 由于身份validation在后端工作,我可以得到一个访问令牌,这是我将来使用我的restAPI所需要的唯一东西。 我定义了一个path,在接收带有令牌的json之后,我的浏览器被手动redirect到$ window.location。 所以当这个页面被加载的时候(对于用户来说是不可见的,它太快了,不能通知),我分析令牌,保存令牌,分析authentication,当成功的时候我手动redirect到主页。