Tengo un servidor Koa que usa Passport para autenticar a los usuarios contra un Array y un cliente React. Después de un inicio de sesión exitoso, las siguientes solicitudes no se autentican ya que la cookie no está definida. El parámetro de error de la función de authenticate tiene:
{ message: 'Missing credentials' } Después de navegar por el sitio, solucioné los errores habituales, llamé a la función de authenticate devuelta, agregué {credentials: 'include'} para fetch , etc., pero sigo teniendo el mismo problema.
Lista de middleware: router.use(cookie.default());
app.use :
koa-body, koa-session-store (también probado con koa-session), pasaporte.inicializar(), pasaporte.sesión(), enrutador.rutas(), koa-static
estrategia local
passport.use(new Strategy((username,password,callback)=>{ var u = users.find(u=>u.username == username); return (u && password == 'password')? callback(null, u ):callback('user not found', false); }));/iniciar sesión autenticar
.post('/login', (ctx)=>{ console.log(ctx.request.body); return passport.authenticate('local',(err,user,info,status)=>{ if(user) { ctx.login(user); ctx.body = {success: true}; // works correctly ctx.redirect('/login-success'); } else { ctx.redirect('/login-failure'); } })(ctx); });/Inicio de sesión exitoso
router.get('/login-success',async(ctx)=> { return passport.authenticate('local',(err,user,info,status)=>{ console.log(err); // "Missing credentials" })(ctx); await ctx.response; ctx.body = {success: true}; }).llamada de cliente
let body = JSON.stringify({username: this.state.username, password: this.state.password}); let result = await fetch('http://localhost:4200/login',{method:'POST',credentials: 'include',body, headers:{'Content-Type':'application/json'}});La solución es realmente simple, pero la razón es difícil de encontrar.
el middleware async debe llamar await next() o return next() al final. De lo contrario, se genera un error 404.
Al agregar await next() a la devolución de llamada async /login-success , se solucionó el problema.
Documentación: https://github.com/koajs/koa/blob/master/docs/troubleshooting.md#my-middleware-is-not-called