我正在使用express4在我的nodejs應用程序中使用passportjs。爲了測試目的,我使用session-file-store來保持會話。Passportjs的會話問題
我建立會話和passportjs方式:
this.app.use(session({
secret: process.env.SESSION_SECRET || configuration.session_secret,
store: new fileStore(),
resave: false,
saveUninitialized: false
}));
// config authentication
this.app.use(passport.initialize());
this.app.use(passport.session());
// Configure Passport
passport.use('local-login', new localStrategy.Strategy(
(username, password, done) => {
Services.users.authenticatePromise(username, password).then(
function(token) {
done(null, token);
},
function(err) {
done(null, false, err);
},
).done();
},
));
// Serialize user in session
passport.serializeUser((token: AccessToken, done) => {
let user = {
_token: token.accessToken,
_expiryInAt: token.expiryInMs + new Date().getTime(),
};
done(null, user);
});
passport.deserializeUser((sessionUser, done) => {
done(null, sessionUser);
});
不過,我遇到的問題是,如果我是登錄的用戶之前沒有寫任何東西到會話,passportjs工作正常。但是,如果我試圖將一些數據寫入會話中,例如購物車詳細信息,那麼Passportjs將無法將用戶令牌序列化到會話存儲中。所以登錄無法成功。
我錯過了什麼?
你在做'req.session = {...}'或者類似的東西?即用新的東西覆蓋整個會話對象。 – robertklep
不,我做了這樣的事情:'''if(!req.session ['basket']){ req.session ['basket'] = {}; }''' – rzhomx
對不起,這不應該是問題,因爲它無法序列化。你能否將'passport.serializeUser/deserializeUser'的實現添加到你的問題中?另外,_「無法序列化」_是什麼意思? – robertklep