重定向 oauth2 后未调用 deserializeUser

deserializeUser is not being called after redirect oauth2

我已经尝试解决这个问题 2 天了。

当我转到这条路线时 '/profile' deserializeUser 工作正常

但是,当用户通过身份验证并被重定向回回调 url 时,不会调用 deserialzeUser。

我的重定向:

router.get('/discord', passport.authenticate('discord'));
//when the user authorize from discord page:

router.get('/discord/redirect', passport.authenticate('discord', { 
    failureRedirect: '/forbidden',
    successRedirect: '/profile'
}));

用户被重定向到“/profile”,检查他们是否经过身份验证(这将是错误的,因为 req.user 由于未调用 deserializeUser 而为空)然后他们将被要求再次进行身份验证这是发生是因为没有调用 deserializeUser。

个人资料路线:

function isAuthorized(req, res, next) {
    if(req.user) {
        console.log("User is logged in.");
        console.log(req.user);
        next();
    }
    else {
        console.log("User is not logged in.");
        res.redirect('/auth/discord');
    }
}

router.get('/profile', isAuthorized, (req, res) => {
    console.log(req.user);
    res.send('You are logged in =) !');
});

我正在使用来自 Heroku+ express-session + passport-discord 的 postgress 数据库我的会话:

// Passport store session
const sessionConfig = {
  store: new pgSession({
      pool: db,
      tableName: 'session'
  }),
  name: 'SID',
  secret:process.env.SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {
      maxAge: 1000 * 60 * 60 * 24 * 7,
      sameSite: true,
      secure: false // ENABLE ONLY ON HTTPS
  }};
app.use(session(sessionConfig))
app.use(passport.initialize());
app.use(passport.session());

我发现了我的错误。

只需删除

sameSite: true,

来自会话配置