重定向 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,
来自会话配置
我已经尝试解决这个问题 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,
来自会话配置