Angular роутер не реагирует на перенаправление Cognito? - PullRequest
0 голосов
/ 27 февраля 2020

Когда мы используем социальный вход в систему с AWS Cognito, Cognito отправляет перенаправление в браузер на go на signin redirect URL-адрес входа в систему. Конфигурированный URL-адрес для этого в этом случае: http://localhost:4200/home/.

Когда приложение получает это перенаправление, оно выполняет от go до http://localhost:4200/home/, однако отображаемый компонент по-прежнему остается для http:localhost:4200/signin/. Если я вручную обновлю sh страницу, выбрав URL и нажав Enter, отобразится домашний компонент.

Конфигурация маршрутизатора выглядит следующим образом:

const routes: Routes = [
  { path: '', pathMatch: 'full', redirectTo: 'signin' },
  { path: 'home', component: HomeComponent, canActivate: [ AuthGuard ] },
  { path: 'signin', component: SigninComponent, canActivate: [ UnauthGuard ] },
  { path: 'signout', component: SignoutComponent, canActivate: [ UnauthGuard ] }
]

Таким образом, приложение всегда сначала перенаправляет на signin. Кажется, проблема в двойном перенаправлении.

Мысли о том, как это исправить?

Я пробовал без перенаправления Router. Я добавил страницу welcome, отображаемую с маршрутом ''. При нажатии входа в систему на этой странице приложение по-прежнему перезагружается с маршрутом signin изначально (там, где он остановился) и перенаправляет на маршрут home, однако компонент входа по-прежнему отображается.

const routes: Routes = [
  { path: '', component: WelcomeComponent, canActivate: [ UnauthGuard ] },
  { path: 'home', component: HomeComponent, canActivate: [ AuthGuard ] },
  { path: 'signin', component: SigninComponent, canActivate: [ UnauthGuard ] },
  { path: 'signout', component: SignoutComponent, canActivate: [ UnauthGuard ] }
]


Обновление

См. Ответ. Подал отчет об ошибке:

https://github.com/aws-amplify/amplify-js/issues/4988

1 Ответ

0 голосов
/ 27 февраля 2020

Разобрался. Несмотря на то, что пользователь проходит проверку подлинности после входа в Google при первом вызове, подобном подписанному сообщению:

    Auth.currentAuthenticatedUser()
      .then((u) => {
        console.log('The user is : ', u)
      }).catch(e=>{console.log("NOT AUTHENTICATED YET")})
  }

Журналы NOT AUTHENTICATED YET. Таким образом, AuthGuard не позволяет пользователю проходить.

Когда страница обновляется снова, Auth.currentAuthenticatedUser() возвращает пользователя, поэтому охранники направляют приложение на правильную страницу.

...