Задать вопрос
@Developeer

Почему я не могу получить cookie?

Есть класс Server к которому я подключил cookie-parser. Прописал app.use(cookieParser);
Есть файл с путями. Со страницы /signup я отправляю cookie, они отправляются и через Chrome я это вижу, но при этом при проверке этих самых куки при запросе страницы /personal при помощи функции isAuthenticated я получаю ошибку.
Cannot read property 'auth' of undefined

Почему я не могу получить куку при помощи req.cookies.auth ???
const express = require('express');
const hbs = require('hbs');
const exphbs = require('express-handlebars');
const routes = require('../routes/routes');
const session = require('express-session');
const cookieParser = require('cookie-parser');


class Server {
    constructor(port) {
        this.app = express();
        this.port = port;

        //Директория со статическими файлами
        this.app.use(express.static('src/public'));

        this.app.use(routes);
        this.app.use(cookieParser);



        //Для работы с шаблонизатором handlebars
        this.app.engine('hbs', exphbs(
            {
                layoutsDir: "src/views/layouts",
                defaultLayout: 'layout',
                extname: 'hbs'
            }
        ));

        //Директория с частичными шаблонами
        hbs.registerPartials("src/views/partials");

        //Установка шаблонизатором handlebars
        this.app.set('view engine', 'hbs');
        this.app.set('views', 'src/views');
    }
    start(){
        const STARTUP_MESSAGE = `Server is running at ${this.port} port`;

        this.app.listen(this.port , (err) => {
            if(err)
                throw err;
            else
                console.log(STARTUP_MESSAGE);
        });
    }
}

module.exports = Server;


const {Router} = require('express');
const router = Router();
const bodyParser = require('body-parser');
const User = require('../models/User');
const bcrypt = require('bcrypt');
const cookie_parser = require('cookie-parser');
const salt = 10;


function isAuthenticated(req, res, next){
    //const {cookies} = req;
    if (req.cookies.auth === 'true'){
        next();
    }
}

var urlencodedParser = bodyParser.urlencoded({ extended: false });

router.get('/', (req,res)=>{
    res.render('index.hbs',{
        title : 'Коммунальные услуги'
    });

});

router.get('/registration', (req,res) =>{
    res.render('registration.hbs',{
        title : 'Регистрация'
    });
});

router.post('/registration', urlencodedParser, (req,res)=>{
    if(!req.body)
        return res.sendStatus(400);
    const {userSurname, userName,userLastName, userEmail, userPass, userPhone} = req.body;
    let hashed_pass = bcrypt.hashSync(userPass, salt);
    User.create({
        surname: userSurname,
        name: userName,
        lastname: userLastName,
        login: userEmail,
        password: hashed_pass,
        email: userEmail,
        telephone: userPhone,
        personal_account_id: 1
    }).then(res=>{
        console.log("Registration Succesfully!");
    }).catch(err=>{
        console.log(err);
    })
    res.redirect('/signup');
})

router.get('/account' ,(req,res) =>{
    res.render('account.hbs',{
    });
});

router.get('/signup', (req,res)=>{
    res.render('signup.hbs',{
        title : 'Войти'
    })
})

router.get('/about',(req,res)=>{
    res.render('about.hbs',{
        title: 'О компании'
    })
})
router.get('/personal', isAuthenticated,(req,res)=>{
    res.render('personal.hbs',{
        title: 'Личный кабинет'
    })
})

router.post('/signup', urlencodedParser, ((req, res) => {
    if(!req.body)
        return res.sendStatus(400);
    let login = req.body.login.toString();
    let password = req.body.password.toString();

    User.findOne({where:{
        login: login
        //password: password
        }, raw: true}).then(findedUsers=>{
            if(findedUsers) {
                console.log('Authenticated');
                res.cookie('auth', 'true');
                return res.redirect('/personal');
            }
            else
                res.redirect('/signup');
                console.log('No User with this values');
    }).catch(err=>{
        console.log(err);
    })
    })
)
module.exports = router;
  • Вопрос задан
  • 660 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
notiv-nt
@notiv-nt
Как ваше ничего? Да, моё тоже
очередность роутов и мидлверов поменяйте
Ответ написан
@Nc_Soft
1. Вы сначала задаете роуты, а потом парсите куки, надо сначала куки спарсить.
2. в isAuthenticated если юзер не авторизован ничего не происходит, надо там кинуть ошибку или сделать какой-то респонс, иначе страница будет висеть (потому что не вызывается next)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы