[英]passport js sessions does not work with Cors
我在互聯網上搜索了很多,但我找不到答案。
我在一個端口使用我的前端,在另一個端口使用我的后端。 我使用cors來啟用請求,這是有效的。 但是當我實現護照js並且使用mongodb whit的會話不起作用時,這意味着當我嘗試使用req.user獲取用戶時,這是未定義的。 這是我的index.js代碼
app.use(cors());
app.use(session({
resave: false,
saveUninitialized: false,
secret: 's3cr3et',
store: new MongoStore({
url: process.env.MONGO_URI
})
}));
app.use(passport.initialize());
app.use(passport.session());
我的護照js是
在這里,我定義我的auth,序列化和反序列化用戶。 我的Auth和序列化工作正常, 但不反序列化
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, (err, user) => {
done(null, user);
});
});
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
User.findOne({ email: email.toLowerCase() }, (err, user) => {
if (err) { return done(err); }
if (!user) { return done(null, false, { error: 'Invalid credentials.' }); }
user.comparePassword(password, (err, isMatch) => {
if (err) { return done(err); }
if (isMatch) {
return done(null, user);
}
return done(null, false, { error: 'Invalid credentials.' });
});
});
}));
我也試過cookie會話而不是mongo db,但我想這不是解決方案。 問題是因為某些原因護照不讀會議。
此外,我嘗試啟用coors憑據並指定原點但反序列化仍然沒有設置用戶
app.use(cors({
credentials: true,
origin: ['http://localhost:8080']
}));
我希望你能幫助我,因為我無法讓它工作謝謝!!
我遇到過同樣的問題。 在我的情況下,我在前端有一個SPA,在Node.js上有一個RESFful(好吧,不是我們在這里維護狀態)。 后來我發現當我以前向RESTful API發出請求時,我沒有發送瀏覽器cookie和數據。 這正是問題所在,即不讓用戶反序列化的問題,因為我們需要后端的cookie數據來找出哪個用戶發送了特定請求。 嘗試做同樣的事情,我希望能像我一樣解決你的問題。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.