javascript - Angular 路由器对 Cognito 重定向没有反应?
问题描述
当我们通过 AWS Cognito 使用社交登录时,Cognito 会向浏览器发送重定向以转到signin redirect
URL 后登录。在这种情况下,为此配置的 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 ] }
]
更新
见答案。提交了错误报告:
解决方案
弄清楚了。即使用户在使用 Google 登录后通过了身份验证,但第一次调用就像这个帖子签名:
Auth.currentAuthenticatedUser()
.then((u) => {
console.log('The user is : ', u)
}).catch(e=>{console.log("NOT AUTHENTICATED YET")})
}
日志NOT AUTHENTICATED YET
。所以AuthGuard
不允许用户通过。
当页面再次刷新时Auth.currentAuthenticatedUser()
返回用户,因此守卫将应用程序引导到正确的页面。
推荐阅读
- javascript - 使用自定义 d3 事件更新 Vue 触发器
- android - 无法解析“:app@debug/compileClasspath”的依赖关系
- java - 相同的tomcat JNDI错误下的2个子域
- kubernetes - 在 Kubernetes 的 pod 内运行的应用程序的 IP 地址分配
- android - 发布前报告警告详细信息在哪里
- python - 简化 Python 代码(石头、纸、剪刀)
- java - 如何在每 10 秒内处理通过 ftp 接收的 50 k 文件
- python - 在尝试使用 Bitbake 构建时,用 python 编写的 Yocto 食谱给了我一个错误
- typescript - 搜索时使用 Leaflet Geocoder 而不设置标记
- javascript - 使用 Lodash 映射时的键问题