Node.js Nodejs-Passport-无法将用户序列化到会话中

Node.js Nodejs-Passport-无法将用户序列化到会话中,node.js,passport.js,Node.js,Passport.js,我正在使用以下库: 我想做的是: 对API进行身份验证(用户名/密码) 获取访问令牌 从API获取用户配置文件 使用passport登录用户 我正在使用以下实现: PasswordGrantStrategy.prototype.userProfile = function(accessToken, done) { return done(null, { real_name: 'Foo Baz', email: 'test@test.com' }); } passport.use(ne

我正在使用以下库:

我想做的是:

  • 对API进行身份验证(用户名/密码)
  • 获取访问令牌
  • 从API获取用户配置文件
  • 使用passport登录用户
  • 我正在使用以下实现:

    PasswordGrantStrategy.prototype.userProfile = function(accessToken, done) {
        return done(null, { real_name: 'Foo Baz', email: 'test@test.com' });
    
    }
    passport.use(new PasswordGrantStrategy({
        tokenURL: 'http://api.local/oauth/token',
        clientID: "2",
        clientSecret: "",
        grantType: "password",
    },
    function(accessToken, refreshToken, profile, done) {
      return done(null, profile);
    }));
    
    function authenticate() {
        return function(req, res, next) {
            var username = "email@email.com";
            var password = "password";
    
            passport.authenticate('password-grant', {
                username: username,
                password: password
            })(req, res, next);
        };
    }
    
    使用用户名/密码登录到API

    它正在将配置文件传递到
    passport的回调函数中。使用(new PasswordGrantStrategy
    但是,我收到以下错误:

    无法将用户序列化到会话中


    当我传递一个配置文件时,它应该是序列化的,看起来一切正常。现在这是否意味着会话可能有问题?

    您需要向Passport提供serializeUser和deserializeUser方法,以便它工作

    从官方文件:

    passport.serializeUser(function(user, done) {
      done(null, user.id);
    });
    
    passport.deserializeUser(function(id, done) {
      User.findById(id, function(err, user) {
        done(err, user);
      });
    });
    

    虽然从未调用过
    反序列化用户
    ,但只调用了
    序列化用户
    。您在会话存储中使用了什么?我在
    app.js
    中只有以下内容:
    app.use(passport.session())
    哪个存储会话?!?我想这就是我出错的地方,但似乎无法确定如何处理会话会话会话需要存储在某个位置,以便express可以将后续请求与序列化用户进行比较。请查看类似的内容-实现起来非常简单我在m的后端有postgresy项目,因此我将上面的包与另一个写入postgres的包一起使用: