护照序列化用户失败。类型错误:无法设置未定义的属性(设置:"用户")



我有这个代码

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: "secret_shh",
resave: true,
saveUninitialized: true,
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new PASSPORT_LOCAL_STRATEGY(
(username, password, done) => {
if (username === "test" && password === "passwrd") {
return done(null, {username: username});
} else {
return done(null, false);
}
}
));
passport.serializeUser((user, done) => {
done(null, user.username);
});
passport.deserializeUser((username, done) => {
done(null, {username: username})
}); 
router.post('/login', 
passport.authenticate('local', {
failureRedirect: '/failure',
successRedirect: '/success'
}
));

当我用错误的用户和密码发送/登录时,它正确地将我发送到failureRedirect,但是当我发送正确的用户和密码时,它发送给我一个错误说:TypeError: Cannot set properties of undefined (setting 'user')

我一直得到同样的错误,我想我已经追踪到它。希望这对你有帮助。

在我的例子中,我的护照策略依赖于旧版本的passport-oauth,而旧版本又依赖于0.5.1之前的passport版本。在0.5.1中,passport被更新到保存passport会话的位置(不再在req._passport.session)。旧版本的护照希望在那里找到它。这里有一些你可以检查的东西来追踪你的问题。

  • 查看堆栈跟踪,查看node_modules中的哪个包导致错误
  • 检查你的依赖树,看看你是否有一个依赖于旧版本的passport (npm list --depth 3)
  • 尝试恢复0.5.0护照,看看你的问题是否已经解决了

最新更新