如何通过AuthenticationResult创建Cognito客户端会话?
基于外部获取的AuthenticationResult设置Amplify本地会话方案
前置条件
确保你项目中Amplify的Auth配置,与生成AuthenticationResult的Cognito用户池ID、应用客户端ID完全一致,否则会话校验会失败。
实现步骤
- 导入所需依赖
import { Auth } from 'aws-amplify'; import { CognitoUserSession, CognitoIdToken, CognitoAccessToken, CognitoRefreshToken } from 'amazon-cognito-identity-js';
- 用你拿到的
AuthenticationResult构造Token实例
// 替换为你从后端/其他渠道获取的AuthenticationResult实际值 const externalAuthResult = { IdToken: 'xxx', AccessToken: 'xxx', RefreshToken: 'xxx', ExpiresIn: 3600 }; const idToken = new CognitoIdToken({ IdToken: externalAuthResult.IdToken }); const accessToken = new CognitoAccessToken({ AccessToken: externalAuthResult.AccessToken }); const refreshToken = new CognitoRefreshToken({ RefreshToken: externalAuthResult.RefreshToken });
- 构造会话实例并写入本地存储
const sessionParams = { IdToken: idToken, AccessToken: accessToken, RefreshToken: refreshToken, ExpiresIn: externalAuthResult.ExpiresIn }; const userSession = new CognitoUserSession(sessionParams); // 该方法会自动将会话写入你配置的存储介质(localStorage或Cookie) await Auth.setSignInUserSession(userSession);
注意事项
- 设置完成后可调用
await Auth.currentSession()验证会话是否生效,后续Amplify的接口请求会自动携带该会话凭证 - 若你没有拿到RefreshToken,构造
CognitoRefreshToken时传入空字符串即可,仅会失去自动刷新会话的能力 - 所有传入的Token必须未过期,否则会话写入会直接抛出校验错误
内容的提问来源于stack exchange,提问作者Itamaram
相关产品推荐
相关产品推荐

