reactjs - 配置 Amplify 以使用现有的 Cognito 令牌
问题描述
我正在开发一个使用 Amplify (JS) Storage 将文件上传到 S3 存储桶的应用程序。它已经配置好并且工作正常,但我需要使用策略来保护它,并且只允许一组能够上传文件的用户(组)。我正在使用后端服务从 Coginito 获取令牌,并将其传递给前端,现在我唯一需要弄清楚的是,如何将该令牌传递给 Amplify。我确实尝试过,federatedSignIn
但它需要一个域,除了令牌之外,我真的不需要传递任何东西。
解决方案
Auth 上有一个(现在是私有的)函数似乎可以处理这种情况,_handleAuthResponse
.
将成功登录后获得的返回 url 传递给函数,其中包含令牌。
因为它是一个私有函数,它需要这个解决方法来访问 _handleAuthResponse:
urlWithToken = 'https://localhost:4200/login#access_token=[ACCESS_TOKEN]&id_token=[ID_TOKEN]&state=[STATE]&token_type=Bearer&expires_in=3600'
(Auth as any)._handleAuthResponse(urlWithToken)
我不确定有多少参数是必需的,因为这些是我们从联合登录返回的登录重定向中包含的参数。
在我们的应用程序中,我们使用 Hub 侦听器来获取用户详细信息:
Hub.listen('auth', ({ payload: { event, data } }) => {
console.log('HUB:', event);
console.log('HUBData:', data);
if (event == 'signIn' && data != undefined) {
//data is a user object
}
});
这是用于拼凑的参考: https ://github.com/aws-amplify/amplify-js/issues/4955
推荐阅读
- node.js - 如何在 Mongoose 模型中检查字段是否设置为 true
- python-3.x - 更改 ndarray 的维度并乘以内容
- powershell - PowerShell脚本问题,缺乏知识的原因
- java - 在 java servlet 中获取 Cookie
- python - 熊猫:将时间戳转换为日期时间
- javascript - 即使可用堆内存比使用的大得多,也会出现堆内存不足错误
- java - 无法在对话框中找到动态按钮
- php - 使用 Laravel 编辑 PDF
- python-3.x - extract values of column according to value in another columns in csv file
- angularjs - UI-Router for Angular:是否可以在不重新加载页面的情况下更新位置