req.session.user выдает «неопределенный» в качестве вывода - PullRequest
1 голос
/ 02 апреля 2020

Я использую программу аутентификации при входе в стек MERN. Когда я ввожу правильное имя пользователя и пароль, функция входа работает нормально. Есть некоторые компоненты, которые могут отображаться только в том случае, если клиент вошел в систему. Поэтому для проверки клиента я реализовал на сервере функцию аутентификатора, которая должна возвращать сообщение об успешном завершении вместе с объектом сеанса. Как только я пытаюсь аутентифицироваться, req.session.user выдает результат как «неопределенный». Я сослался на несколько похожих вопросов, но не смог решить свою проблему. Как я могу решить эту проблему?

Функция входа в систему,

router.post('/login', (req, res) => {
    const email = req.body.email;
    const password = req.body.password;

    if (!email || !password) {
        return res.status(400).json({ msg: "Please enter all fields" });
    }
    //Find user
    User.findOne({ email : email })
        .then(user => {
            if(!user){
                console.log('Not a user')
            }

            //Password matching
            bcrypt.compare(password, user.password, (err, isMatch) => {
                if(err) throw err;

                if(isMatch){
                    console.log('Logged in')
                    const userSession = {
                        id: user.id,
                        name : user.name,
                        email : user.email
                    };

                    req.session.user = userSession;

                    res.json({ msg: "Logged in successfully", userSession});
                } else {
                    console.log('Incorrect username or password')
                }
            });
        })
        .catch(err => console.log(err));
});

сервер. js,

const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const mongoose = require('mongoose');
const passport = require('passport');
const flash = require('connect-flash');
const session = require('express-session');
const cors = require('cors');

const MongoDBStore = require('connect-mongodb-session')(session);

const app = express();
const router = express.Router();
const {IS_PROD} = require('./config/config');
const MAX_AGE = 1000 * 60 * 2;

mongoose.connect("mongodb+srv://root:admin@cluster0-ynman.gcp.mongodb.net/test?retryWrites=true&w=majority", {useNewUrlParser:true, useCreateIndex:true, useUnifiedTopology:true})
    .then(() => console.log('Mongo DB Connected'))
    .catch(err => console.log(err));

//setting up connect-mongodb-session store
const mongoDBStore = new MongoDBStore({
    uri: "mongodb+srv://root:admin@cluster0-ynman.gcp.mongodb.net/test?retryWrites=true&w=majority",
    collection : "mySession"
})

//Bodyparser
app.use(express.urlencoded({extended:false}));
app.use(cors());
app.use(express.json());

//Express Session
app.use(session({
    name: 'session',
    secret: 'secret',
    resave: true,
    saveUninitialized: false,
    store : mongoDBStore,
    cookie :{
        path    : '/',
        httpOnly: false,
        maxAge : MAX_AGE,
        sameSite: false,
        secure : IS_PROD
    }
}));

//Routes
app.use('/', require('./routes/index'));
app.use('/users', require('./routes/users'));

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

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

Функция аутентификации,

router.get("/authenticator", (req, res) => {
    const userSession = req.session.user;
    console.log(userSession);

    if(userSession){
        return res.json({msg : "Authenticated successfully", userSession});
    } else {
        return res.status(401).json({msg : "Unauthorized"});
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...