簡體   English   中英

注冊或通過 Google 登錄后,如何在 Cognito 中獲取用戶 session?

[英]How to get user session in Cognito after sign up or login via Google?

我通過谷歌設置授權並登錄 Cognito。 現在我需要獲取用戶屬性,但我不明白該怎么做? 像 getSession 這樣的現有 api 不起作用,並拋出錯誤。

我使用 React 和庫“amazon-cognito-identity-js”。

我以這種方式通過谷歌登錄:

const path = `https://${myDomain}.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=${clientId}&redirect_uri=${redirect}`;
router.push(path);

我的 email 出現在用戶池中 - 沒關系。

成功重定向后,我調用此代碼,因為我需要一個 session 來獲取用戶屬性:

const getSession = (role: TRoles): Promise<IReturnObj> => {
  return new Promise((resolve, reject) => {
    const user = MyPool.getCurrentUser();

if (!user) {
  reject(new Error('Current user not found'));
}

user.getSession((err: Error, session: CognitoUserSession) => {
  if (err) {
    reject(err);
  } else {
    resolve({session, user});
  }
    });
  });
};

結果我得到未定義的用戶並拒絕錯誤。 我做錯了什么?

我的 Cognito 應用程序客戶端設置

您需要使用redirect_uri中的憑據創建一個新的CognitoUserSession 創建 CognitoUserSession 並將所有相關憑據存儲在您的CognitoUserSession中后,您將能夠成功使用getSession

例子:

重定向_uri

https://www.example.com#access_token={{accessToken}}&id_token={{idToken}}&token_type=Bearer&expires_in=3600

導入相關對象

import {
    CognitoUser,
    CognitoAccessToken,
    CognitoIdToken,
    CognitoRefreshToken,
    CognitoUserSession,
} from "amazon-cognito-identity-js";

然后提取accessToken、idToken,創建你的session如下:

const AccessToken = new CognitoAccessToken({
    AccessToken: accessToken,
});
const IdToken = new CognitoIdToken({ IdToken: idToken });

const RefreshToken = new CognitoRefreshToken({
    RefreshToken: idToken,
});

const sessionData = {
    IdToken,
    AccessToken,
    RefreshToken,
};

const userSession = new CognitoUserSession(sessionData);

const userData = {
    Username: email, // get this from token/another method
    Pool,
};

const cognitoUser = new CognitoUser(userData);
cognitoUser.setSignInUserSession(userSession);

cognitoUser.getSession((err, session) => {
    if (session.isValid()) {
        // access your session
    }
    // throw error
});

@user10290365 的回答解決了我的問題,這幾乎正是 OP 遇到的問題,我花了太長時間挖掘文檔試圖弄清楚這個問題。

非常感謝您的詳細回答。 我會贊成你的回應,但我缺乏聲譽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM