IF 语句在 NODE js 中设置会话属性并表示

IF Statement is setting a session attribute in NODE js and express

我正在尝试为 Uni 项目创建一个登录页面,但在尝试根据访问级别重定向用户时遇到了困难,if 语句在函数之前设置了访问角色,因此所有流量都是第一次登录被重定向到管理页面,刷新页面使代码正常工作,就像从数据库获取详细信息的代码完成时一样运行...任何帮助都会非常感谢!

LogInController

const session = require('express-session');
var Login = require('../models/Login');

exports.checksLogin = (req, res) => {
    // Implement this method using the pupil model
    console.log(req.originalUrl + "POST Received with query: ", req.body)
    const {Email, Pswd} =  req.body
    Login.checkLogin(Email, Pswd)
    if(session.AccessRole='Admin'){
        res.redirect('/admin')
    }
    else{
    }
}

Login.js(型号)

exports.checkLogin = (Email, Pswd) => {
    var database = require('../dbConfig');
    database.then(con => {
        con.query("SELECT * FROM Pupils WHERE Email = '" + Email + "'AND Pswd= '" + Pswd + "'").then(([rows]) => {
            //console.log(rows)
            if(rows.length>0){
                
                session.LoggedIn=true;
                session.FirstName=rows[0].FirstName
                session.LastName=rows[0].LastName
                session.Email=rows[0].Email
                session.CourseCode=rows[0].CourseCode
                session.Pswd=rows[0].Pswd
                session.AccessRole='Student'

                console.log(session.Loggedin+ '1')


            }
            else {
                con.query("SELECT * FROM Staff WHERE Email = '" + Email + "'AND Pswd= '" + Pswd + "'").then(([rows]) => {
                    console.log(rows)

                    session.LoggedIn=true;
                    session.staffID=rows[0].staffID
                    session.FirstName=rows[0].FirstName
                    session.LastName=rows[0].LastName
                    session.Email=rows[0].Email
                    session.Role=rows[0].Role
                    session.Pswd=rows[0].Pswd
                    
                    if(session.Role='Admin'){
                        console.log(`Admin`)
                        session.AccessRole='Admin'
                    }else{
                        session.AccessRole='Staff'
                    }
                })
                
            }
        })
    })
}

index.js

const express = require('express');
const app = express();
const path = require('path');
const exphbs = require('express-handlebars');
var session = require('express-session');
var bodyParser = require('body-parser');

// Middlewares
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars')
app.use(express.urlencoded({extended: true}))


// Client routes
app.get('/', (req, res) => res.render('index'));

app.use('/admin', require('./routes/Admin'));
app.use('/login', require('./routes/Login'));


app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));
app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());



const PORT= process.env.PORT || 5000;

app.listen(PORT, () => console.log(`Server Started on port ${PORT} `)); 

Login.js(路线)

const express = require('express');
const router = express.Router();

var Login_controller =  require('../controllers/LoginController');

// Use the login.handlebars template
router.get('/', (req, res) => res.render("login"));

// CRUD routes
router.post("/submit-login", Login_controller.checksLogin);

module.exports = router;

Admin.js

const express = require('express');
const session = require('express-session');
const router = express.Router();

var pupils_controller =  require('../controllers/PupilsController');
var staff_controller = require('../controllers/StaffController')



// Use the login.handlebars template
router.get('/', (req, res) => {
    console.log(session.LoggedIn)
    if(session.AccessRole=='Admin'){
    res.render("admin")
    }
    else{
        console.log(`No Entry`)
        res.redirect('/')
    }
    
});

// CRUD routes
router.post('/create-pupil', pupils_controller.createPupil);
router.post('/delete-pupil', pupils_controller.deletePupil);
router.post('/create-staff', staff_controller.createStaff)


module.exports = router;

login.handlebars

<p> Log In </p>


<form method="POST" action="/login/submit-login">
    <label for="Email">Email</label><br>
    <input type="text" name="Email" /><br>
    <label for="Pswd">Password</label><br>
    <input type="text" name="Pswd" /><br>
    <input type="submit" />
</form>

使用 MYSQL 数据库、Node js 和 express

谢谢

请注意这里的IF语句必须有双等号来比较,而不是你在做赋值

const session = require('express-session');
var Login = require('../models/Login');

exports.checksLogin = async (req, res) => {
    // Implement this method using the pupil model
    console.log(req.originalUrl + "POST Received with query: ", req.body)
    const {Email, Pswd} =  req.body
    await Login.checkLogin(Email, Pswd)
    if(session.AccessRole == 'Admin') {
        res.redirect('/admin')
    } else {
    }
}