首页 > 解决方案 > 登录中间件未按预期工作 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)

标签: node.jstypescriptexpressexpress-session

解决方案


推荐阅读