¿El enrutador angular no reacciona a la redirección de Cognito?

2020-02-27 javascript angular angular-routing angular-router aws-amplify

Cuando usamos el inicio de sesión social con AWS Cognito, Cognito envía una redirección al navegador para ir a la URL de signin redirect inicio de sesión después del inicio de sesión. La URL configurada para eso en este caso es http://localhost:4200/home/ .

Cuando la aplicación recibe esta redirección, va a http://localhost:4200/home/ sin embargo, el componente que se muestra sigue siendo el de http:localhost:4200/signin/ . Si actualizo manualmente la página seleccionando la URL y presionando enter, se muestra el componente de inicio.

La configuración del enrutador se ve así:

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 ] }
]

Entonces, la aplicación siempre redirige para signin al principio. El problema parece ser la doble redirección.

¿Pensamientos sobre cómo solucionar esto?

Lo probé sin la redirección del Router . Agregué una página de welcome que se muestra con la ruta '' . Al hacer clic en inicio de sesión en esta página, vuelve a cargar la aplicación fijas con la signin ruta inicialmente (donde leftoff) y las redirecciones a la home ruta, sin embargo aún se muestra el componente signin.

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 ] }
]


Actualizar

Ver respuesta. Presentó un informe de error:

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

Answers

Lo averigué. A pesar de que el usuario se autentica después de iniciar sesión con Google, la primera llamada como esta firma posterior:

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

Registros NOT AUTHENTICATED YET . Por lo tanto, AuthGuard no permite que el usuario pase.

Cuando la página se actualiza nuevamente, Auth.currentAuthenticatedUser() devuelve al usuario, por lo que los guardias dirigen la aplicación a la página correcta.

Related