首页 > 解决方案 > Angular 路由器对 Cognito 重定向没有反应?

问题描述

当我们通过 AWS Cognito 使用社交登录时,Cognito 会向浏览器发送重定向以转到signin redirectURL 后登录。在这种情况下,为此配置的 URL 是http://localhost:4200/home/.

当应用程序收到此重定向时,它会转到http://localhost:4200/home/但显示的组件仍然是http:localhost:4200/signin/. 如果我通过选择 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

标签: javascriptangularangular-routingangular-routeraws-amplify

解决方案


弄清楚了。即使用户在使用 Google 登录后通过了身份验证,但第一次调用就像这个帖子签名:

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

日志NOT AUTHENTICATED YET。所以AuthGuard不允许用户通过。

当页面再次刷新时Auth.currentAuthenticatedUser()返回用户,因此守卫将应用程序引导到正确的页面。


推荐阅读