2014-12-03 184 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