我有一個使用Express 4和Passport 0.3.2的應用程序。我已經設置了一個passport-local
策略,當/session
端點發送用戶名和密碼時,該策略會獲取正確的用戶信息。PassportJS和Express 4沒有正確保存Cookie /會話
但是,用戶信息永遠無法正確保存。因此,req.user
在所有收聽者中始終未定義,並且req.isAuthenticated()
始終返回false。
我看過其他文章,經常會發現中間件安裝的順序問題,但是我已經以正確的方式對它們進行了排序,所以我不知道該從哪裏下載。
這裏是我的/session
POST
聽衆:
app.post("/session",
passport.authenticate('local'),
(req: any, res: any) => {
// if we reach this point, we authenticated correctly
res.sendStatus(201);
}
);
這裏是我的LocalStrategy
設置:
passport.use(new LocalStrategy(
(username, password, done) => {
let users = userRepository.getAll();
let usernameFilter = users.filter(u => u.getUsername() === username);
if (!usernameFilter || usernameFilter.length !== 1) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!password || password !== "correct") {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, usernameFilter[0]);
}
));
這裏是我的應用程序設置:
let app = express();
app.use(cookieParser());
app.use(bodyParser.json());
app.use(expressSession({
secret: 'my secret key',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
我使用以下依賴版本:
"body-parser": "^1.15.1",
"cookie-parser": "^1.4.3",
"express": "^4.13.4",
"express-session": "^1.13.0",
"passport": "^0.3.2",
"passport-local": "^1.0.0"
我添加了一個回調到我的POST /session
,但拋出一個錯誤。這是我的回調:
app.post("/session",
passport.authenticate('local', {
session: false
}),
(req: express.Request, res: express.Response) => {
req.logIn(req.user, (err: any) => {
if (err)
throw err;
});
// if we reach this point, we authenticated correctly
res.sendStatus(201);
}
);
我收到以下錯誤拋出:
Error: Failed to serialize user into session
我相信你需要在你的POST – pulse0ne