Some odd problems with custom strategies
When creating a custom strategy: 

```
app.use(
(ctx, next) =>
  passport.authenticate('local',
  async (err, user, info, status) => {
    if (err) {
      ctx.status = 401;
      return;
    }
    if (user === false) {
      ctx.status = 401;
      return;
    }

    await ctx.login(user, { session: false })
    next()
  }
)(ctx, next),

async (ctx, next) => {
    //ctx.state.user is available here
    //DO SOME ASYNC STUFF (none of these is throwing errors)
    await something;

    ctx.status = 200;
    console.log(ctx.status) //shows 200
}
)
```

The result from this is a 404 status for some reason. 

There's also a separate but possibly related issue of not being able to use `ctx.throw` inside the (err, user, info, status) function. It ends up also sending a 404 status instead of whatever I'm throwing though this isn't as big of a problem.

Not sure if I am just misunderstanding how to use this, but I simply want to do a custom login, then have a middleware after that does some async stuff and sends some data to client.
