2014-12-03 93 views
0

我在AngularJS中遇到问题,我似乎无法找到简单的解决方案。 我正在使用两项服务来与服务器进行用户授权。授权基于两个令牌:访问令牌和刷新令牌。角度注入循环

现在我有一个服务(Auth)负责整个授权过程和第二个服务(Api),负责与服务器通信。

授权的工作方式是用户使用他的访问令牌访问数据。一旦令牌失效,它将尝试提交刷新令牌并希望取回新的访问令牌。

问题是,如果服务器响应401并且令牌无效,我只需运行Auth.authenticate();在后台(没有重定向或任何东西),如果成功继续使用新的访问令牌。

不幸的是,由于Auth服务使用Api服务,我无法将Auth服务注入到Api服务。有没有什么好方法可以在一个全球性的地方做我想做的事情(所以我不需要在控制器中的每一个请求之后调用重新授权)?

一些建筑信息:

Auth Service (injects Api Service) 
| ---- authorisation function (uses Api Service) 

Api Service 
| ---- Different functions to prepare data for request 
| ---- One function to send all requests 
| ---- One function to handle all rejected promisses which includes detection of 401 and should include "silent" re-authorisation (AuthService.authorisation) 

我真的希望它不听起来太混乱。 我试过拦截器,但结果是一样的 - 喷油器回路。

我没有改变我的体系结构,唯一的想法是如果有任何方法可以获得Auth服务的当前活动实例,因为无论如何都会加载它。但没有找到任何细节。

谢谢!

回答

1

我有一个类似的问题,也与我的授权。

有时候重新设计是最好的解决方案,但我认为在这种情况下,对于想要描述的“循环”访问,您有一个很好的用例。

尝试以下操作:

  1. 进样$injector到您的API服务,而不是您的验证服务。
  2. 用户$injector.get('AuthService')获取实例化的Auth服务。
+0

美丽!这正是我需要的 – Tom 2014-12-03 16:45:28