Javascript 谷歌oauth与angularjs

Javascript 谷歌oauth与angularjs,javascript,angularjs,oauth-2.0,google-oauth,Javascript,Angularjs,Oauth 2.0,Google Oauth,我正在尝试用angularjs实现GoogleOAuth。下面是创建Google登录按钮的代码,以及用于该按钮的回调函数 // Google sign in intialization function <script type="text/javascript"> a = function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async

我正在尝试用angularjs实现GoogleOAuth。下面是创建Google登录按钮的代码,以及用于该按钮的回调函数

  // Google sign in intialization function
  <script type="text/javascript">
    a = function() {
     var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
     po.src = 'https://apis.google.com/js/client:plusone.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
   };
  </script>

  // Callback function after signin
  <script type="text/javascript">
    var access_token = ''
    function signinCallback(authResult) {
      console.log(authResult)
      if (authResult['status']['signed_in']) {
        access_token = authResult['access_token']
        if (window.location.pathname != "/album")
          window.location = "/#/albums";
        document.getElementById('signinButton').setAttribute('style', 'display: none');
      } else {
        console.log('Sign-in state: ' + authResult['error']);
      }
    }  
  </script>    

问题是,当Google返回我时,access token angular服务使用nil access_token自动执行。我怎样才能解决这个问题。我还想知道我的整个方法是否有缺陷

没有简单的答案。您需要处理您的身份验证在Angular初始化之前成功的可能性,而且更可能是相反的情况

你可以采取几种方法。有一点需要考虑的是,如果你试图调用一个没有访问令牌的谷歌API,你会得到401的错误。401也可能在令牌过期一小时后自然发生。因此,无论如何,您都需要为401响应编写代码,这样您就可以在令牌准备就绪之前使用相同的逻辑来处理AngularJS初始化。要注意的一个问题是不要多次调用auth

有人希望Google中有人正在为JS库创建一个AngularJS友好的包装器

picasaServices.factory('Phone', ['$resource',
  function($resource){
    return $resource('https://picasaweb.google.com/data/feed/api/user/default', {}, {
      query: {method: 'GET', params:{alt: 'json', access_token: access_token}, isArray: false}
    });
  }
]);