gpt4 book ai didi

reactjs - 将用户添加到 Cognito 后刷新 Cognito 访问 token

转载 作者:行者123 更新时间:2023-12-04 15:58:19 25 4
gpt4 key购买 nike

你好,我有以下场景。

首次用户登录后,用户必须选择他们的类型,我通过调用将用户添加到适当的 Cognito 组的 lambda 来实现此目的。

调用成功后,我想在我的 React 应用程序中刷新用户 session ,我通过调用以下代码来完成:

refreshSession = () => {
return new Promise((resolve, reject) => {
this.props.authenticatedUser.refreshSession(this.props.authenticatedUser.signInUserSession.refreshToken, () => {
Auth.currentAuthenticatedUser()
.then(updatedAuthUser => {
this.props.onUserAuthenticated(updatedAuthUser); // update redux state
resolve();
})
.catch(err => {
console.log(err);
reject();
});
});
});
};

它在更新 idToken 的值时完成工作 - idToken 负载具有更新的用户组和角色。

我遇到的问题是在调用上面定义的 refreshSession 函数后执行的 API 调用中。 lambda 调用的行为就好像用户不属于它添加到的 Cognito 组一样,我收到 403 响应。如果我注销并再次登录,我可以成功调用 API。

我正在做类似(伪代码)这样​​的事情:

addUserToCognitoGroup()
.then(() => {
// user is added to Cognito Group
refreshIdToken().then(() => {
// my idToken seems to be refreshed
doSomethingThatRequiresMembershipInTheGroup() // this API call returns 403
})

我认为这可能与我的代码不刷新访问 token 有关,但我正在努力寻找一种正确刷新整个用户 session 的方法。

我的 package.json 依赖

"dependencies": {
"amazon-cognito-identity-js": "^2.0.11",
"aws-amplify": "^0.4.6",
"aws-api-gateway-client": "^0.2.13",
"aws-sdk": "^2.263.1",
"aws-serverless-express": "^3.2.0",
"aws4": "^1.6.0",
"axios": "^0.18.0",
"express": "^4.15.2",
"graphql": "^0.13.2",
"lodash": "^4.17.10",
"moment": "^2.22.2",
"react": "^16.4.1",
"react-bootstrap": "^0.32.1",
"react-dom": "^16.4.1",
"react-intl": "^2.4.0",
"react-redux": "^5.0.7",
"react-router": "^4.3.1",
"react-router-bootstrap": "^0.24.4",
"react-router-dom": "^4.3.1",
"react-scripts": "^1.1.4",
"react-table": "^6.8.6",
"redux": "^4.0.0"
}

任何指针将不胜感激:)

最佳答案

今天再次尝试后,我注意到如果在将用户添加到 Cognito Group 后重新加载页面,我可以避免收到 403。

这让我开始调试 Amplify 的 Auth API,我注意到它有时会调用一个名为 _setCredentialsFromSession 的函数。所以我去修改了我的代码(currentUserCredentials 调用 _setCredentialsFromSession):

refreshSession() {
return new Promise((resolve, reject) => {
this.props.authenticatedUser.refreshSession(this.props.authenticatedUser.signInUserSession.refreshToken, () => {
Auth.currentUserCredentials().then(() => {
Auth.currentAuthenticatedUser().then(updatedAuthUser => {
this.props.onUserAuthenticated(updatedAuthUser);
resolve();
})
.catch(err => {
console.log(err);
reject();
});
});
});
});

感觉有点脏,但现在可以用了。如果有人找到更好的解决方案,请告诉我。

关于reactjs - 将用户添加到 Cognito 后刷新 Cognito 访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com