我在其他地方看到過這個問題,但是,這些解決方案似乎對我不起作用。在嘗試控制臺記錄 req.session 和 req.user 時,我回傳了會話,如下所示,但是,req.user 回傳未定義。我相信在序列化用戶時會出現問題,因為 VS 代碼提醒我,passport.serialUser 函式中的“型別用戶不存在‘id’屬性”,但它控制臺正確記錄了 user.id(我的物件 id用戶檔案)。
如果有人知道可能導致 user.id 屬性不存在/用戶未定義的原因,我將不勝感激。
護照.js檔案:
const LocalStrategy = require("passport-local").Strategy;
const bcrypt = require("bcrypt");
const User = require("../models/User");
const verifyCallback = (username, password, done) => {
User.findOne({ username: username })
.then((user) => {
if (!user) {
return done(null, false);
}
// Validate Password
bcrypt.compare(password, user.password).then((isMatch) => {
if (isMatch) {
return done(null, user);
} else {
return done(null, false);
}
});
})
.catch((err) => {
done(err);
});
};
const strategy = new LocalStrategy(verifyCallback);
passport.use(strategy);
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((userId, done) => {
User.findById(userId)
.then((user) => {
done(null, user);
})
.catch((err) => done(err));
});
index.js 檔案:
session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: true,
store: sessionStore,
cookie: {
maxAge: 1000 * 60 * 60 * 24,
},
})
);
// Passport Auth Middleware
const passportConfig = require("./config/passport");
// Initialize Passport and Use Session for Serialize/Deserialization
app.use(passport.initialize());
app.use(passport.session());
app.use((req, res, next) => {
console.log(req.session);
console.log(req.user);
next();
});
控制臺日志:
cookie: {
path: '/',
_expires: 2021-11-17T02:08:23.650Z,
originalMaxAge: 86400000,
httpOnly: true
}
}
undefined
用戶檔案示例:
{"_id":{"$oid":"6186c13beb18d33d5088f7b2"},
"username":"coolguy9",
"password":"$2b$13$4p5apH8Q8k8hP4WpCNt6/O40M9I0jlkG.LXIE3d/V89Kmtmk1plxa",
"firstname":"Bob",
"lastname":"Woodhull",
"team":"Warehouse",
"createdAt":{"$date":{"$numberLong":"1636221243904"}},
"updatedAt":{"$date":{"$numberLong":"1636221243904"}},
"__v":{"$numberInt":"0"}}```
uj5u.com熱心網友回復:
解決了這個問題。在包含 axios 實體的前端的 loginAPI.js 檔案中,我需要包含選項withCredentials: true
。
例子:
baseURL: "http://localhost:8000/api/",
timeout: 1000,
withCredentials: true,
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/381788.html