В целом, мы, вероятно, не предполагаем, что аутентифицированный пользователь будет доступен сразу после перенаправления Cognito.
Поскольку мы не можем этого сделать, мы также не можем перенаправить на защищенный ресурс, поскольку охранник запрещает access.
Поэтому мы должны перенаправить на незащищенную страницу, а затем ждать, пока Amplify сообщит нам, что аутентификация прошла.
Затем мы можем использовать субъект для уведомления других частей приложение.
Похоже, что правильный способ прослушивания (пока AngularService не поддерживает Angular 9) - это запускать одновременно и Auth.currentAuthenticatedUser()
, и Hub.listen.
Сразу после редирект Auth.currentAuthenticatedUser()
, скорее всего, сгенерирует, но Hub.listen в конечном итоге сгенерирует событие входа, которое мы можем затем выполнить на нашем предмете.
Так что попробуйте Auth.currentAuthenticatedUser()
, и если он сгенерирует, то попытайтесь прослушать sigin
событие с Hub
в блоке catch
. Также слушайте signout
событий в этом случае.
После этого, пока пользователь не выйдет из системы или не истечет время сеанса, Auth.currentAuthenticatedUser()
всегда должен вернуть пользователя, и мы можем затем, что по теме, которой мы являемся использовать для наблюдения за аутентифицированным состоянием.
Вот так я планирую подойти к нему.