У меня проблема в моем 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, так как она загружена в любом случае. Но не смог найти никаких подробностей.
Спасибо!
Красивая! это именно то, что мне нужно – Tom