2014-10-02 56 views
0

我想在这里完成两件事情:AngularJS /网络API 2令牌Authenticaion

1)通过在从登录屏幕getToken.getToken(),后者又调用getTokenFromServer.getToken用户名和密码,设置令牌给返回的令牌值。

2)每次从Angular控制器调用getToken.getToken,但这次只是返回我假设已经检索到的令牌存储在getToken工厂中,因为它是单例?

我在AngularJS/Web API 2身份验证的正确轨道上吗?

我知道getTokenFromServer.getToken的作品,如果给定的用户名和密码,它会返回一个有效的标记。但是我不确定在保存一个令牌用于后续调用需要令牌的控制器方面从那里做了什么。感谢您的帮助。

securityApp.factory("getToken", function (getTokenFromServer) { 

    function getToken(userName, password) { 

     var token; 

     if (!!token) { 
      getTokenFromServer.getToken(username, password).then(function (data) { 
       token = data; 
      }); 
     }; 

     return token; 
    } 

}); 


securityApp.factory("getTokenFromServer", function ($http, $q) { 

    function getToken(userName, password) { 

     return $http({ 
      method: 'POST', url: '/token', data: { username: userName, password: password, grant_type: 'password' }, transformRequest: function (obj) { 
       var str = []; 
       for (var p in obj) 
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
       return str.join("&"); 
      } 
     }) 
     .then(function (result) { 
      return result.data.access_token; 

     }, function (errorResponse) { 
      return $q.reject(errorResponse.data); 
     }); 

    } 

    return { 
     getToken: getToken 
    }; 

}); 
+2

将标记保存在cookie中,并将其放置在后续服务器调用的标题中。 – 2014-10-02 05:25:38

回答

3

您只需从Auth服务器获取访问令牌一次(从服务器获取请求令牌),直到它到期。

一旦获得令牌,您需要将其存储在本地存储上,并使用httpInterceptor服务继续向每个后续请求发送授权标头。

我写了详细的帖子系列,有一个完全解决您的问题。您可以阅读更多AngularJs Authentication using Web API 2

如果您需要更多帮助请给我留言。

+0

非常感谢。我会看看你的写作,并给它一个镜头。 – 2014-10-03 03:40:26

+0

您的文章非常有帮助,再次感谢您撰写文章。 – 2014-10-04 05:59:06