首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动设置aws-amplify用户会话

手动设置aws-amplify用户会话
EN

Stack Overflow用户
提问于 2020-05-07 04:13:53
回答 1查看 528关注 0票数 2

我有一个由多个应用程序使用的cognito用户池。我有一个中央身份验证应用程序,用户可以在其中登录/注册/重置密码/等等任何与身份验证相关的内容。

我还有另外五个用户可以访问的应用程序。我没有让他们登录到每个应用程序中,而是将身份验证应用程序嵌入到iframe中。如果用户已登录,它将对父文档执行postMessage,或者如果令牌在用户登录后无效,它将对认知会话对象执行postMessage。

在父文档中是否可以执行诸如Auth.setUserSession(会话)之类的操作?现在,我必须使用token和username值构建一堆字符串,并将它们手动保存到localStorage。

我已经检查了aws-amplify身份验证代码,但我没有看到任何可以实现这一点的东西。

谢谢。

在父文档中:

代码语言:javascript
复制
    const eventMethod = window.addEventListener ? 'addEventListener' : 'attachEvent';
        const eventListener = window[eventMethod];
        const messageEvent = eventMethod === 'attachEvent' ? 'onmessage' : 'message';
        eventListener(messageEvent, async evt => {
          const session = _.get(evt, 'data.session');
          if (session) {
              this.saveUserSession(session);
          }
        }, false);

        private saveUserSession(session) {
// this is the code that I would like to simplify with something
// Auth.setUserSession(session)

            const cognitoClientId = environment.COGNITO.Auth.userPoolWebClientId;

            const userName = _.get(session, 'idToken.payload.email', '');
            const makeKey = (name) => `CognitoIdentityServiceProvider.${cognitoClientId}.${userName}.${name}`;

            localStorage.setItem(makeKey('accessToken'), JSON.stringify(_.get(session, 'accessToken', '')));
            localStorage.setItem(makeKey('idToken'), JSON.stringify(_.get(session, 'idToken', '')));
            localStorage.setItem(makeKey('refreshToken'), JSON.stringify(_.get(session, 'refreshToken', '')));
            localStorage.setItem(makeKey('clockDrift'), JSON.stringify(_.get(session, 'clockDrift', '')));
            localStorage.setItem(`CognitoIdentityServiceProvider.${cognitoClientId}.LastAuthUser`, userName);
          }

In the auth application, after a user successfully logs in:

    const session = await Auth.currentSession();
          window.parent.postMessage({session}, '*');
EN

回答 1

Stack Overflow用户

发布于 2021-06-07 21:32:58

您可以通过向setSignInUserSession方法提供认知用户会话来使用amazon-cognito-identity-js建立用户会话

代码语言:javascript
复制
const userPool = new CognitoUserPool({
  UserPoolId: `USER_POOL_ID`,
  ClientId: `APP_CLIENT_ID`,
});
const cognitoIdToken = new CognitoIdToken({
  IdToken: idToken,
});
const cognitoAccessToken = new CognitoAccessToken({
  AccessToken: accessToken,
});
const cognitoRefreshToken = new CognitoRefreshToken({
  RefreshToken: refreshToken,
});
const username = cognitoIdToken.payload.Username; // or what you use as username, e.g. email
const user = new CognitoUser({
  Username: username,
  Pool: userPool,
});
user.setSignInUserSession(new CognitoUserSession({
  AccessToken: cognitoAccessToken,
  IdToken: cognitoIdToken,
  RefreshToken: cognitoRefreshToken,
}));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61644513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档