在我们的用例中,我们需要使用

AuthFlow: REFRESH_TOKEN

基本上使用this method

有没有办法使用Amazon-Cogito-Identity-js包来做到这一点? 我们将idToken、accesToken和renhToken存储在本地存储中,我们还可以存储用户的用户名(SUB)

我们的第一个 idea 是使用"userSession.renhSession",但问题是,要使用该方法,我们需要调用UserPool.getCurrentUser(),在我们的例子中,它返回"NULL",因为令牌是在没有使用sdk的情况下获得的,并且我们还没有CognitoIdentityServiceProvider.****.LastAuthUser和库所依赖的其他密钥.

有没有办法初始化CognitoUser对象并使用用户的令牌和邮箱/用户名对其调用auth?

推荐答案

如果登录没有amazon-cognito-identity-js并且用户名没有存储在带有键CognitoIdentityServiceProvider.${this.clientId}.LastAuthUser的本地存储中,则UserPool.getCurrentUser()返回null(请参见getCurrentUser)

如果您要手动管理令牌,则需要执行以下操作:

const poolData = {
 UserPoolId: '...', // Your user pool id here
 ClientId: '...', // Your client id here
};
const username = '' // TODO: get user name from a storage
const refreshToken = '' // TODO: get token from a storage

const userPool = new CognitoUserPool(poolData);
const userData = {
 Username: username,
 Pool: userPool,
};
const cognitoUser = new CognitoUser(userData);
cognitoUser.refreshSession(
  new CognitoRefreshToken({ 
    RefreshToken: refreshToken 
  }), 
  (error, session) => {
    /* TODO: save new tokens to your local storage */
  })

其中,会话是CognitoUserSession的实例

注意:如果您正在使用后端进行登录/注册,我建议您使用后端来刷新令牌

Javascript相关问答推荐

Webpack将懒惰加载的模块放入主块中

TestCafe预计文本等于以下内容之一

为什么我无法使用useMemo()停止脚本渲染?

如何指定1条记录1个表?

橡皮擦完全让画布变成白色

React对话框模式在用户单击预期按钮之前出现

脚本.js:3:20未捕获的类型错误:无法读取空的属性(读取addEventHandler)

容器如何更改默认插槽中子项的显示?

node TS:JWT令牌签名以验证客户端和后台问题之间的身份验证

传递一个大对象以在Express布局中呈现

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

处理时间和字符串时MySQL表中显示的日期无效

setcallback是什么时候放到macrotask队列上的?

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

使用js构造一个html<;ath&>元素并不能使其正确呈现

为什么当我更新数据库时,我的所有组件都重新呈现?

我正在试着做一个TicTacToe Ai来和我玩.但是,我试着在第一个方块被点击时出现一个X,然后在第二个方块之后出现一个O

在SuperBase JS客户端中寻址JSON数据

顶点图使用组标签更新列之间的条宽

在JavaScript中将Base64转换为JSON