【发布时间】:2022-01-02 09:45:37
【问题描述】:
我正在使用 amazon-cognito-identity-js 实现 node.js 后端。
我想创建一个登录(用户名、密码)和 refreshToken(token) API。
这是我的代码:
import { AuthenticationDetails, CognitoUser, CognitoUserPool, CognitoRefreshToken } from "amazon-cognito-identity-js"
public loginWithAmazonCognitoIdentity (username: string, password: string){
var authenticationData = {
Username : username,
Password : password,
};
var authenticationDetails = new AuthenticationDetails(authenticationData);
var poolData = { UserPoolId : 'eu-north-1_xxxxxx',
ClientId : '3al0l3mhcxxxxxqgnp789987'
};
var userPool = new CognitoUserPool(poolData);
var userData = {
Username : username,
Pool : userPool
};
var cognitoUser = new CognitoUser(userData);
const user = cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
var accessToken = result.getAccessToken().getJwtToken();
console.log("token: " + accessToken);
var refresh = result.getRefreshToken().getToken();
console.log("RefreshToken: " + refresh);
},
onFailure: function(err) {
console.error(err);
},
});
}
此函数返回一个 accessToken 和一个 refreshToken 而没有错误。
在这之后,我实现了这个功能:
public refreshToken(refreshToken)
var poolData = { UserPoolId : 'eu-north-1_xxxxxx',
ClientId : '3al0l3mhcxxxxxqgnp789987'
};
var userPool = new CognitoUserPool(poolData);
var userData = {
Username : 'lacucudi',
Pool : userPool
};
var cognitoUser = new CognitoUser(userData);
var token = new CognitoRefreshToken({ RefreshToken: refreshToken })
cognitoUser.refreshSession(token, (err, session) => { if (err) {console.log(err)} else console.log('session: ' + JSON.stringify(session)) });
}
但传递之前检索到的 refreshToken 它会返回:
NotAuthorizedException:无效的刷新令牌。
谁能告诉我这 2 个 api 的正确后端实现是什么?
【问题讨论】:
-
可能是 Username、UserPoolId、ClientId 或 refreshToken 无效。你用了回调样式,但是我没有看到你函数的回调函数参数(例如:
loginWithAmazonCognitoIdentity),请问如何在函数外使用“结果”? -
Username 和 UserPoolId 与上面的登录函数相同,返回一个 id 令牌,access_token 和 refresh_token 填充
-
复制并粘贴您的刷新令牌到 jwt.io ,应该会出现令牌有效负载的内容。
-
@hoangdv 错误消息返回,因为在 Cognito 设置中启用了设备跟踪选项
标签: javascript node.js amazon-web-services amazon-cognito refresh-token