定义本地策略时,我们将创建一个User对象,并将其传递给回调函数。
passport.use(new LocalStrategy(function(username, password, cb) {
// query database to check that credentials are correct.
// var User = {username: username, etc};
// return cb(null, User);
});
用户将在身份验证后通过req.user访问。
此User对象被传递给serializeUser。
passport.serializeUser(function(user, cb) {
cb(null, user.username);
});
此用户名存储为req.session.passport.user。然后将其传递给deserializeUser。
passport.deserializeUser(function(username, cb) {
// Typically here I see the username or id being used to
// query the DB to create a user object "user" with more
// data than just the username (whatever we need).
// We pass that user object to the callback.
// cb(null, user);
});
此用户对象存储为req.user。
问题:
在req.user可以访问的本地策略中定义用户对象,然后在req.user可用的deserializeUser函数中定义用户对象有什么意义呢?为什么我们在两个地方定义相同的User对象?每个人都在不同的时间定义req.user吗?是将本地策略中的User对象用于身份验证后的第一个重定向,然后将反序列化用户对象用于所有后续重定向,还是这样吗?为什么两个相同的对象?