节点服务器上创建会话"/>
无法在节点服务器上创建会话
我正在尝试创建一个具有登录、注销、身份验证功能的节点服务器。我的代码有一些问题,在调试之后,生成了一些我无法理解或在谷歌上找不到的调试信息日志。
问题:
- 访问前需要身份验证的路由允许无需登录或 cookie 即可访问。
- 另外,登录后设置了cookie,但注销后cookie仍然存在。
调试信息:
- 当没有设置 cookie 并尝试访问 localhost:3000/
快速会话日志:
express-session 没有发送 SID,生成会话 +0ms
- 使用有效凭据发布 localhost:3000/login/password 时
快速会话日志:
express-session 没有发送 SID,生成会话 +0ms
express-session 没有发送 SID,生成会话 +3m
express-session set-cookie connect.sid=s%3AuQgx27XnqODttfCECNGsaeJLOWZhk04e.qnHVj9HmUs2svxtb4mb6R9xpw3imbf0kUEhOiRlNXr4;路径=/; HttpOnly +105ms
快速会话拆分响应 +9ms
快速会话获取 uQgx27XnqODttfCECNGsaeJLOWZhk04e +439ms
express-session session 发现 +8ms
快速会话触摸+5ms
快速会话拆分响应 +2ms
express-session touched +10ms
- 当发布 localhost:3000/logout
快速会话日志:
快速会话获取 uQgx27XnqODttfCECNGsaeJLOWZhk04e +2m
express-session session 发现 +4ms
快速会话保存 uQgx27XnqODttfCECNGsaeJLOWZhk04e +18ms
express-session set-cookie connect.sid=s%3ADEXRlWTn14GqFZU06YdLC-bemM8rn_ri.1v71XtDmg88F5brCD5yy3BsLvQ1UuGv%2FYS3vTeWD%2FUk;路径=/; HttpOnly +40ms
快速会话拆分响应 +6ms
快速会话获取 DEXRlWTn14GqFZU06YdLC-bemM8rn_ri +144ms
express-session session 发现+1ms
快速会话触摸+1ms
快速会话拆分响应 +1ms
express-session touched +2ms
我只是想了解这些概念,我知道我没有遵循良好的编码习惯。这是代码文件。
const express = require("express");
const app = express();
const doten = require("dotenv");
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
const courses = [
{ name: "aa", class: 5 },
{ name: "bb", class: 7 },
{ name: "cc", class: 8 },
{ name: "dd", class: 4 },
];
const user = [{}];
var passport = require("passport");
var LocalStrategy = require("passport-local");
var session = require("express-session");
passport.use(
new LocalStrategy(function verify(username, password, cb) {
if (username == 1 && password == 1) return cb(null, username);
else return cb(null, false, { message: "Incorrect username or password." });
})
);
app.use(
session({
secret: "keyboard cat",
resave: false,
saveUninitialized: false,
cookie: { secure: false },
})
);
app.use(passport.authenticate("session"));
passport.serializeUser(function (username, cb) {
process.nextTick(function () {
return cb(null, {
username: username,
});
});
});
passport.deserializeUser(function (user, cb) {
process.nextTick(function () {
return cb(null, user);
});
});
app.post(
"/login/password",
passport.authenticate("local", {
successRedirect: "/",
failureRedirect: "/login",
})
);
app.get("/", (req, res) => {
res.json({
name: "Sourabh Roy",
class: 9,
section: "A",
roll: 27,
pass: "PASSED",
});
});
app.get("/books/:name", (req, res) => {
res.send({ ...req.params, ...req.query });
});
app.post("/signup", (req, res) => {
let temp_user = req.body;
console.log(req.body);
user.push(temp_user);
res.send(req.body);
});
app.post("/logout", function (req, res, next) {
req.logout(function (err) {
if (err) {
return next(err);
}
res.redirect("/");
});
});
//process.env.SERVER_PORT
app.listen(3000, (err) => {
if (err) console.log("hi");
else console.log("Server is up at port 3000");
});
回答如下:
您需要使用会话存储服务,因为当前会话存储在服务器端内存中,这会导致问题。
在我看来,您需要使用 redis 进行会话存储。这是一个你可以使用的模块https://www.npmjs/package/connect-redis
它也提到了连接 redis 和会话模块的细节。
更多推荐
无法在节点服务器上创建会话
发布评论