Código de ejemplo:
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);
}
});
Al usar el juramento, después de que el proveedor redirige a mi aplicación, el Hub activa un signIn
evento. Sin embargo, la signInUserSession
propiedad es null
cuando se dispara el evento, pero obtiene un valor algún tiempo después (dentro de 100 ms). Esto no parece ocurrir cuando se usa Auth.signIn(email, password)
directamente; signInUserSession
se llena cuando se dispara el evento.
¿Qué está pasando aquí y cómo puedo solucionarlo? Actualmente, tengo un retraso explícito en el código, que es un hack terrible.
javascript
aws-amplify
Thom Smith
fuente
fuente
Hub.listen
para alimentar un canal de eventos. Sin embargo, también intenté ejecutar el código de ejemplo anterior directamente desde una saga, y tuve el mismo problema.Respuestas:
Quizás la antigua forma de JavaScript para esperar a que se complete el valor es útil para garantizar que el código no falle incluso si tarda más de lo esperado en completar el valor.
Aquí hay un código de muestra que normalmente uso cuando no hay otras opciones disponibles.
Puede refactorizar este código de muestra según su necesidad.
Alternativamente, AWS Amplify también tiene otras formas de obtener sesión iniciada por el usuario actual. Por ejemplo,
Auth.currentAuthenticatedUser()
y laAuth.currentSession()
promesa de devolución. Se pueden usar asífuente
no estoy acostumbrado a aws amplify, solo lea algunos github y hasta ahora puedo ver que necesitaremos información sobre su
userPool
implementación, supongo que hay algún problema extraño de devolución de llamadaPero para una solución alternativa, puede proxy la referencia:
fuente