authentication routing passport.js koa

authentication - usando koa y pasaporte para autenticación



routing passport.js (1)

Al usar koa-router , se espera que solo se golpee una ruta. Entonces, cuando tocas la ruta ''*'' no tocará otra ruta, incluso si yield next .

Por lo tanto, debe reemplazar la ruta universal con su propio middleware de autenticación:

app.use(function*(next) { if (this.isAuthenticated()) { yield next } else { this.redirect(''/login'') } });

El middleware de autenticación lo obligará a hacer su enrutamiento con dos objetos de enrutamiento en lugar de uno. Esto es para que pueda distinguir entre rutas públicas y seguras. Entonces algo así como:

var public = new koaRouter(); public.get(''/login'', function *(next) { this.body = yield render(''index.html''); }); public.post(''/login'', passport.authenticate(''local'', { successRedirect: ''/secretBankAccount'', failureRedirect: ''/login'' })); app.use(public.routes()); app.use(function*(next) { if (this.isAuthenticated()) { yield next; } else { this.redirect(''/login''); } }) var secured = new koaRouter(); secured.get(''/secretBankAccount'', function *(next) { this.body = ''2 dollars''; }); app.use(secured.routes());

En el ejemplo anterior, una solicitud golpeará primero el middleware de enrutamiento público. Entonces, si no coincide con la solicitud actual con una ruta pública, se moverá al middleware de autenticación. Si isAuthenticated() es false se producirá una redirección. Si isAuthenticated() es true , pasará al enrutamiento seguro.

Este enfoque se basa en el proyecto koa-pasaporte-ejemplo que fue creado por el autor de koa-passport .

Estoy usando koa y el pasaporte tratando de implementar middleware para evitar el acceso a URIs cuando no está autenticado.

var koa = require(''koa''); var session = require(''koa-generic-session''); var bodyParser = require(''koa-bodyparser''); var koaRouter = require(''koa-router''); var passport = require(''koa-passport''); var views = require(''co-views''); var render = views(''.'', { map: { html: ''swig'' }}); var localStrategy = require(''passport-local'').Strategy; var app = koa(); var router = koaRouter(); app.keys = [''secret'']; app.use(session()); app.use(bodyParser()); app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { done(null, user); }); passport.use(new localStrategy(function(username, password, done) { if (username === ''user1'' && password === ''password2'') { done(null, { userId: 99, userName: ''redBallons'' }); } else { done(null, false); } })); router.get(''/login'', function *(next) { this.body = yield render(''index.html''); }); router.post(''/login'', passport.authenticate(''local'', { successRedirect: ''/secretBankAccount'', failureRedirect: ''/login'' })); router.get(''*'', function *(next) { if (! this.isAuthenticated()) { console.log(''not authenticated''); this.redirect(''/login''); } else { console.log(''authenticated''); yield next; } }); router.get(''/secretBankAccount'', function *(next) { this.body = ''2 dollars''; }); app.use(router.routes()); app.listen(8080);

sin embargo, nunca puedo acceder a mi cuenta secretBank. Puedo ingresar el usuario y la contraseña correctos y puedo ver el mensaje autenticado, pero el rendimiento siguiente en enrutador.get (''*'') no me transmite a la siguiente función de enrutamiento