amazon-web-services - 为什么我的 AWS Congito 用户在使用 Auth.currentAuthenticatedUser() 时能够登录,但“未通过身份验证”?
问题描述
我已通过 AWS 管理控制台将 AWS Cognito 用户手动添加到我的应用程序的用户池中。已确认此用户所需的用户池凭据。我正在设置一个身份验证守卫来控制对路由的访问。每当我使用 Auth.signIn() 函数时,promise 都会成功解析,但是,在登录后调用 Auth.currentAuthenticatedUser() 时,canActivate() 函数中的 promise 会返回错误消息“未通过身份验证”。我已经阅读了关于 cookieStorage 的 GitHub 问题,导致了这个问题,但没有配置这个。
登录.component.ts
signIn(username, password) {
return new Promise(() => {
Auth
.signIn(username, password)
.then(() => {
this.router.navigate(['main/dashboard']); // navigates to main/dashboard as expected
})
.catch(err => {
this.authenticationError = err.message;
})
});
}
auth.guard.ts
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
return Auth
.currentAuthenticatedUser()
.then(() => {
return true;
})
.catch((err) => {
this.router.navigate(['signin']);
console.log(err) // "not authenticated"
return false;
});
}
解决方案
通过 AWS 管理控制台创建的用户不会被视为已通过身份验证,除非该用户的状态字段为 CONFIRMED。在我的例子中,状态字段是 FORCE_CHANGE_PASSWORD。AWS 希望通过控制台创建的用户在首次登录或使用电子邮件或移动验证验证其账户后更改其密码。对于我的应用程序,我不想使用电子邮件或移动验证。为了解决这个问题,我为该用户使用了以下 aws-cli 命令。
aws cognito-idp admin-set-user-password --user-pool-id your_user_pool_id --username username --password password --permanent
推荐阅读
- android - Android Crashlytics - 限制网络访问
- node.js - windows下Mocha中设置环境变量
- python - 检测像素是否为红色
- python - Pycharm - 在 WSL 上使用 pwntools 和远程解释器
- c++ - 复制文件的最佳方式是什么,我可以在复制过程中轻松取消复制?
- flutter - 为什么 PopupMenuButton 下拉菜单与 statusBar 重叠?
- elasticsearch - 如何在 Kubernetes 状态集中恢复永久磁盘?
- c# - 我想在 asp.net 中向 gridview 添加垂直滚动条
- sql-server - 同一业务规则的多个外键
- highcharts - Highcharts 地图在调用 setData 时未绘制气泡