【发布时间】:2021-09-24 12:53:41
【问题描述】:
我正在使用 congnito 进行身份验证并且我正在尝试创建一个 privateRoute。
我目前正在使用 redux 和 amazon-cognito-identity-js
export const cognitoSignIn = async ({
email,
password,
}: SignInInfo): Promise<CognitoUserSession> => {
return new Promise((resolve, reject) => {
console.log(email, password);
const authenticationDetails = new AuthenticationDetails({
Username: email.trim(),
Password: password.trim(),
});
const cognitoUser = new CognitoUser({
Username: email,
Pool: userPool,
});
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: (result) => {
if (!currentUser) {
currentUser = userPool.getCurrentUser();
}
currentUser.getSession((err: any, session: CognitoUserSession) => {
if (err) {
reject(err);
} else {
resolve(session);
}
});
},
onFailure: reject,
});
});
};
export const signIn =
(signinInfo: SignInInfo) =>
async (dispatch: Dispatch<UpdateToken | UpdateError>) => {
try {
const auth: CognitoUserSession = await cognitoSignIn(signinInfo);
const accessToken = auth.getAccessToken().getJwtToken();
localStorage.setItem("user", JSON.stringify(accessToken));
dispatch(updateToken(accessToken));
} catch (error: any) {
dispatch(updateError(error));
}
};
我的问题与上面的代码无关。
当您进行 cognito 登录时,会在 localstorage 中创建一个令牌。
刷新时, 要获取本地存储中令牌的状态,您需要使用 cognito getSession 函数。
但是getSession函数是一个异步函数
如何在渲染前执行函数获取数据?
【问题讨论】:
标签: reactjs asynchronous redux amazon-cognito refresh