Beispielcode:
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);
}
});
Bei Verwendung von Eid löst der Hub ein signIn
Ereignis aus , nachdem der Anbieter zu meiner App weitergeleitet hat . Die signInUserSession
Eigenschaft ist jedochnull
wenn das Ereignis ausgelöst wird, erhält jedoch einige Zeit später (innerhalb von 100 ms) einen Wert. Dies scheint bei Auth.signIn(email, password)
direkter Verwendung nicht aufzutreten . signInUserSession
wird ausgefüllt, wenn das Ereignis ausgelöst wird.
Was passiert hier und wie kann ich es umgehen? Derzeit habe ich eine explizite Verzögerung im Code, was ein schrecklicher Hack ist.
javascript
aws-amplify
Thom Smith
quelle
quelle
Hub.listen
versorge einen Ereigniskanal mit Strom. Ich habe jedoch auch versucht, den obigen Beispielcode direkt aus einer Saga auszuführen, und hatte das gleiche Problem.Antworten:
Möglicherweise ist die alte Methode von JavaScript zum Warten auf das Auffüllen von Werten hilfreich, um sicherzustellen, dass Code nicht fehlschlägt, selbst wenn das Auffüllen des Werts länger als erwartet dauert.
Hier ist ein Beispielcode, den ich normalerweise verwende, wenn keine anderen Optionen verfügbar sind.
Sie können diesen Beispielcode nach Ihren Wünschen umgestalten.
Alternativ bietet AWS Amplify auch andere Möglichkeiten, um die aktuell angemeldete Benutzersitzung abzurufen. zB
Auth.currentAuthenticatedUser()
undAuth.currentSession()
Versprechen zurückgeben. Sie können so verwendet werdenquelle
Ich bin es nicht gewohnt, aws zu verstärken - lesen Sie einfach etwas Github und bis jetzt kann ich sehen, dass wir Informationen über Ihre
userPool
Implementierung benötigen - ich denke, ein seltsames RückrufproblemFür eine Problemumgehung können Sie die Referenz als Proxy verwenden:
quelle