簡體   English   中英

未在下一個請求上設置會話Cookie-Express.js

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM