title: using koa and passport for authenication
body: <p>I'm using koa and passport trying to implement middleware to prevent access to URIs when not authenticated.</p>
  
  <pre><code>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' &amp;&amp; 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);
  </code></pre>
  
  <p>however, I can never get to my secretBankAccount. I can enter the correct user and password and can see the authenicated message, but the yield next in router.get('*') does not pass me through to the next routing function</p>