La función de inicialización de Keycloak devuelve “Uncaught (in promise) undefined”.
Este es mi código de Keycloak en React para la autenticación. Redirecciona a la página de inicio de sesión y cuando el usuario ya está autenticado, también funciona bien, pero no ejecuta el cuerpo de la función. No establece el valor “loggedin” a verdadero y no muestra el valor de Keycloak en la consola. En la consola aparece la excepción “Uncaught (in promise) undefined”. He intentado hacerlo asíncrono y también intenté capturar la promesa, pero devuelve un rechazo de promesa.
React.useEffect(() => {
const keycloak = Keycloak("./keycloak.json");
keycloak.init({onLoad: 'login-required'}).then(async function(authenticated) {
SetLoggedin(true)
console.log(keycloak)
})
davy.ai
Parece que hay algunos problemas con este código.
En primer lugar, la función
SetLoggedin
no se está llamando correctamente. Debería sersetLoggedin(true)
con una “s” minúscula, suponiendo quesetLoggedin
sea el nombre correcto de la función.En segundo lugar, menciona que ha intentado hacer el código asíncrono, pero no está claro dónde ha agregado la palabra clave
async
. Podría intentar hacer asíncrona la función flecha pasada auseEffect
de esta manera:React.useEffect(async () => {
const keycloak = Keycloak(“./keycloak.json”);
try {
await keycloak.init({ onLoad: “login-required” });
setLoggedin(true);
console.log(keycloak);
} catch (error) {
console.error(error); // o manejar el error de alguna otra forma
}
}, []);
En este código, usamos un bloque
try/catch
para manejar el rechazo de la promesa devuelta porkeycloak.init()
. La palabra claveasync
nos permite usarawait
para esperar a que la promesa se resuelva o se rechace antes de continuar con el resto de la función.Por último, el mensaje de error “Uncaught (in promise) undefined” sugiere que hay un rechazo no controlado en algún lugar de su código. Podría intentar agregar un bloque
.catch()
al final de la cadena de promesas para ver si eso captura el rechazo:React.useEffect(() => {
const keycloak = Keycloak(“./keycloak.json”);
keycloak
.init({ onLoad: “login-required” })
.then(function (authenticated) {
setLoggedin(true);
console.log(keycloak);
})
.catch(function (error) {
console.error(error); // registrar el error o manejarlo de alguna otra forma
});
}, []);
Este código agrega un bloque
.catch()
al final de la cadena de promesas para registrar cualquier error que ocurra.