這部分代碼處理我的應用程式中的登錄授權路由
const express = require("express");
const authController = require('../controllers/authController');
const indexController = require('../controllers/indexController');
const router = express.Router();
router.use("/login", (req, res, next) => {
if(req.session.loggedIn) {
res.redirect('/account');
}
next();
});
router.use("/account", (req, res, next) => {
if(!req.session.loggedIn) {
res.redirect('/login');
}
next();
});
router.get('/', (req, res) => {
res.redirect('/login');
});
router.get('/login', (req, res) => {
res.render('login');
});
router.get('/log-out', authController.logOut);
router.get("/account", indexController.getAccountData);
module.exports = router;
沒有問題,直到最近幾天它都運行良好。
我沒有更改此檔案,也沒有任何東西authController,也沒有indexController。當我進行更改(在其他部分)時,nodemon重新啟動應用程式并自動跳轉到登錄頁面,因為顯然所有會話都被破壞了。但是我在getAccountData函式中遇到錯誤(錯誤說 req.session 未定義)。
如您所見,應用程式無法在未設定會話的情況下訪問該功能。
我必須再次重新啟動應用程式才能正確操作。
uj5u.com熱心網友回復:
每次服務器重新啟動時都會清除會話。因此,為了避免這種情況,您需要將會話保存到資料庫中。如果您使用的是 mongodb,或者我可以為您提供使用 mongodb 的示例。
import MongoStore from "connect-mongo";
import session from "express-session";
app.use(
session({
store: MongoStore.create({
mongoUrl: process.env.MONGODB_URI || "mongodb://localhost:27017/project",
}),
secret: "secret key",
cookie: { maxAge: sessionExpireInMilliseconds },
})
);
uj5u.com熱心網友回復:
req.session.loggedIn每當會話未定義時都會出錯。您需要在嘗試訪問之前檢查它是否已定義loggedIn。
嘗試:
router.use("/login", (req, res, next) => {
if(req.session && req.session.loggedIn) {
res.redirect('/account');
}
next();
});
router.use("/account", (req, res, next) => {
if(!req.session || !req.session.loggedIn) {
res.redirect('/login');
}
next();
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/398823.html
標籤:javascript 节点.js 表达 节点监视器
