Node.js 为什么我的koa passport身份验证参数用户始终未定义?

Node.js 为什么我的koa passport身份验证参数用户始终未定义?,node.js,session,passport.js,koa2,koa-passport,Node.js,Session,Passport.js,Koa2,Koa Passport,我正在尝试使用koa passport作为koa2,并遵循作者的示例,但我总是得到“未经授权的””。我使用了console.log,发现它甚至没有击中序列化用户 var UserLogin = async (ctx, next) =>{ return passport.authenticate('local', function(err, user, info, status) { if (user === false) { ctx.body

我正在尝试使用koa passport作为koa2,并遵循作者的示例,但我总是得到“未经授权的””。我使用了console.log,发现它甚至没有击中序列化用户

var UserLogin = async (ctx, next) =>{
    return passport.authenticate('local', function(err, user, info, status) {
        if (user === false) {
            ctx.body = { success: false }
        } else {
            ctx.body = { success: true }
            return ctx.login(user)
        }
    })(ctx, next);
};
然后我在网上搜索,发现了另一个路由器的代码,它指向序列化用户,但是done(null,user.id)抛出了错误“无法从未定义的获取id”

auth.js如下所示。我也跟着这里,试图使用会话,但我发送的每个请求都会收到一个类型错误,上面写着“无法读取未定义的属性“message”。但我认为这不是身份验证的核心问题,如果真的是这样,请参考

const passport = require('koa-passport')
const fetchUser = (() => {
  const user = { id: 1, username: 'name', password: 'pass', isAdmin: 'false' };
  return async function() {
    return user
  }
})()

const LocalStrategy = require('passport-local').Strategy
passport.use(new LocalStrategy(function(username, password, done) {
  fetchUser()
    .then(user => {
      if (username === user.username && password === user.password) {
          done(null, user)
      } else {
        done(null, false)
      }
    })
    .catch(err => done(err))
}))

passport.serializeUser(function(user, done) {
  done(null, user.id)
})

passport.deserializeUser(async function(id, done) {
  try {
    const user = await fetchUser();
    done(null, user)
  } catch(err) {
    done(err)
  }
})

module.exports = passport;
顺便说一下,当我使用简单的默认值时,它只会给我一个“notfound”。但是通过console.log我可以看到它实际上进入了登录过程

在server.js中:

// Sessions
const convert = require('koa-convert'); 
const session = require('koa-generic-session');
app.keys = ['mySecret'];
app.use(convert(session()));

// authentication
passport = require('./auth');
app.use(passport.initialize());
app.use(passport.session());
非常感谢您的帮助!!!:D

var loginPass = async (ctx, next) =>{
    passport.authenticate('local', {
        successRedirect: '/myApp',
        failureRedirect: '/'
    });
};
// Sessions
const convert = require('koa-convert'); 
const session = require('koa-generic-session');
app.keys = ['mySecret'];
app.use(convert(session()));

// authentication
passport = require('./auth');
app.use(passport.initialize());
app.use(passport.session());