gpt4 book ai didi

javascript - 使用 oath 时 Amplify.Hub 登录处理程序中的竞争条件

转载 作者:行者123 更新时间:2023-12-04 00:18:53 26 4
gpt4 key购买 nike

示例代码:

Hub.listen('auth', event => {
const { event: type, data } = event.payload;

if (type === 'signIn') {
const session = data.signInUserSession;
console.log('SESSION', data.signInUserSession);
setTimeout(() => {
console.log('SESSION', data.signInUserSession);
}, 100);
}
});

使用 oath 时,在提供商重定向到我的应用程序后,集线器会触发 signIn事件。但是, signInUserSession属性是 null当事件被触发,但在一段时间后(100 毫秒内)得到一个值。使用 Auth.signIn(email, password) 时似乎不会出现这种情况直接地; signInUserSession触发事件时填充。

这里发生了什么,我该如何解决?目前,我在代码中有一个明确的延迟,这是一个可怕的黑客攻击。

最佳答案

也许 JavaScript 等待填充值的旧方法有助于确保代码不会失败,即使填充值的时间比预期的要长。

这是我通常在没有其他选项可用时使用的示例代码。

waitForValue(){
if(myVar!= null && typeof myVar !== "undefined"){
//value exists, do what you want
console.log(myVar)
}
else{
setTimeout(() => {this.waitForValue()}, 100);
}
}

您可以根据需要重构此示例代码。

或者,AWS Amplify 也有其他方法来获取当前登录的用户 session 。例如 Auth.currentAuthenticatedUser()Auth.currentSession()返回 promise 。它们可以像这样使用
private async getUser(){
let user = null;
try {
user = await Auth.currentAuthenticatedUser();
//console.log(user);
} catch (err) {
//console.log(err);
}
//return user;
}

关于javascript - 使用 oath 时 Amplify.Hub 登录处理程序中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com