首页 > 解决方案 > 当我在passportJS中反序列化用户时,用户没有通过

问题描述

我有这个问题,当我从与护照 js 的会话中反序列化我的用户时,我可以获取用户并将其传递给 passportjs。但是passportjs似乎没有将它传递给我的身份验证码。这是我的反序列化代码

passport.deserializeUser(async function (id, done) {
  console.log("Deserializing")
  User.findByPk(id).then(function (user) {
    console.log("Deserialised user" + user.Username);
    done(null, user)
  },
    function (err) {
      console.error(err);
      done(err);
    }
  )
});

这是我的身份验证代码

app.get('/api/loginTest', function (req, res, next) {
  passport.authenticate('local',(err, user, info) => {
    
    if (err) {
      console.error("ERROR: " + err);
      return next(err);
    }
    if (!user) {
      console.error("No User" + user);
      return res.send('No User')

    }
    console.log(user);
    return res.send("Logged in");
  })(req, res, next);
});

最后但并非最不重要的是运行此代码的控制台输出。

istening at http://localhost:3000
Executing (default): SELECT "id", "Username", "Password", "createdAt", "updatedAt" FROM "Users" AS "User" WHERE "User"."Username" = 'Frederik' LIMIT 1;
Deserializing
Executing (default): SELECT "id", "Username", "Password", "createdAt", "updatedAt" FROM "Users" AS "User" WHERE "User"."id" = 15;
Deserialised userFrederik
No Userfalse

如您所见,让用户使用反序列化功能没有问题。但是,一旦我尝试在身份验证中间件中使用用户。用户只是 NULL

标签: javascriptnode.jsexpresspassport.js

解决方案


我能够解决这个问题。我只需要使用req.user而不是user

http://www.passportjs.org/docs/username-password/


推荐阅读