node.js - 登录中间件未按预期工作 Node js,, typescript
问题描述
我有以下文件:
索引.ts
import express from 'express';
import path from "path";
import expressSession from 'express-session';
import { PrismaSessionStore } from '@quixo3/prisma-session-store';
import { PrismaClient } from '@prisma/client';
import bcrypt from 'bcrypt';
import middlewares from './middlewares/middlewares';
import userCrud from './CRUD/userCrud';
const prisma = new PrismaClient();
const app = express();
const port = 7000;
declare module 'express-session' {
interface SessionData {
isLogged:boolean;
}
};
const server = app.listen(port, () => {
console.log(`Express running → PORT ${port}`);
});
app.use(express.urlencoded({
extended: true
}));
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "ejs");
app.post("/login", async (req, res) => {
let user= await userCrud.getUserByEmail(req.body.email);
if(user){
req.session.isLogged = await bcrypt.compare(req.body.password,user.password);
req.session.isLogged ? res.redirect('/') : res.render('login',{message:'INVALID USER OR PASSWORD'});
}
else{
res.render('login',{message:'INVALID USER OR PASSWORD'});
}
});
app.get("/login", (req, res,) => {
res.render('login');
});
//logout
app.get("/logout", async (req, res) => {
req.session.destroy(err=>{});
res.render('login');
});
//login middleware
app.use(middlewares.loginMw)
//index
app.get("/", async (req, res) => {
let users = await userCrud.readUsers();
res.render('index',{users});
});
...
中间件.ts
import express from 'express';
function loginMw(req: express.Request, res: express.Response, next: () => any) {
console.log(req.session.isLogged)
req.session.isLogged ? next():res.redirect('/login');
}
export = {loginMw}
当我第一次转到 localhost:7000 时重定向到 /login (这是正确的),然后我尝试使用正确的凭据登录,但它再次重定向到 /login 但您可以转到任何其他路线,因为您已登录, 通过编写 localhost:7000/route 之类的 url
middleware.ts 的 console.log 如下所示:
undefined (localhost:7000)
undefined (attempt with the right credentials)
true (writing other url or a new attempt on /login route)