[英]Session-cookie not set on the next request - Express.js
我正在嘗試在登錄時設置cookie,但是該cookie似乎並沒有遵循下一個請求。 我究竟做錯了什么? (對不起,如果有nooby問題,表示還很陌生)。
app.js
let express = require("express");
let session = require("express-session");
let bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(session({
secret: "secret",
resave: false,
saveUninitialized: false,
cookie: { secure: true }
}));
路由器
router.route("/login")
.get(function(request, response) {
response.render("../views/partials/login");
})
.post(function(request, response) {
let username = request.body.username;
let password = request.body.password;
User.findOne({user: username}, function(err, user) {
if (err) {
// Some error handling
}
// test password if matching
if (user !== null) {
user.comparePassword(password, function(err, match) {
if (err || !match) {
console.log("The user could not be found")
}
request.session.Auth = { username: username, password: password };
response.redirect("/home");
response.end();
});
} else {
// some error handling
}
});
});
然后,當我在“ / home”上執行下一個請求時,會話cookie不保留有關用戶的任何值( req.session.Auth返回undefined )
router.route("/home")
.get(restrict, function(req,res) {
console.log(req.session.Auth) // -> undefined
res.render("../views/home")
});
也許我做錯了,但我不明白為什么request.session不保存Auth值。 有人可以幫忙嗎?
PS我不想使用任何模塊來處理授權,例如護照等。
您正在做的事不會起作用。
我真的建議您使用passport.js
進行身份驗證。 這非常簡單,並且省去了您現在正在做的許多工作。 在此發布請求中訪問請求對象沒有任何作用。
請嘗試這種方式。
Express中首次啟用的Cookie會話
app.use(express.cookieParser('S3CRE7'));
app.use(express.cookieSession({
key: 'app.key',
secret: 'app.secret'
}));
app.use(app.router);
啟用Cookie會話后,您可以獲取/設置request.session的所有屬性。
我認為您的其余邏輯很好。
您要在HTTPS中測試您的應用嗎? 如果沒有,那么您應該在沒有cookie: { secure: true }
屬性的情況下初始化快速會話,如下所示:
app.use(session({
secret: "secret",
resave: false,
saveUninitialized: false
}));
安全cookie是僅在使用HTTPS時才發送的cookie。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.