=====сессия=====
**server.js**
const express = require('express');//Подключаем модуль
const path = require('path');//Модуль для работы с путями к файлам и папкам
const exphbs = require('express-handlebars');//Подключаем шаблонизатор
const db = require('mongoose');
const session = require('express-session');//модуль для создания сессий, в express
const config = require('./config/config');
const User = require('./models/user');
const varMiddleware = require('./middleware/variables');//модуль проверки авторизации
const app= express();//Результат работы модуля express, по сути создает сервер
const PORT = process.env.PORT || 3000; //Получить порт из переменного окружения или использовать дефолтный
const authRoutes = require('./routes/auth');//Страница auth
const hbs= exphbs.create({//Настройки шаблонизатора
defaultLayout: 'main',//Шаблон по умолчанию, основной, (template/layouts/main.hbs)
extname: 'hbs' //Расширение шаблонов, пользовательское. По умолчанию express-handlebars
});
app.engine('hbs', hbs.engine);//Подключени шаблонизатора к express, регестрируем движок
app.set('view engine', 'hbs');//Запускаем шаблонизатор, используем
app.set('views', 'template');//Указываем папку с шаблонами
app.use(express.static(path.join(__dirname,'public')));//Статические папки для хранения стилей картинок
app.use(express.urlencoded({extended: true}));
app.use(session({//инициализация сессии
secret: 'key secret',//секретный ключ для сессии
resave: false,
saveUninitialized: false
}));
app.use(varMiddleware);//middleware - срабатывает при загруке страницы, данный метод проверяет авторизацию middleware/variables.js
/**
* Регестрируем роуты, с префиксами
*/
app.use('/auth',authRoutes);//Страница заказов
**middleware/variables.js**
/**
* проверяем авторизацию при каждой загрузке страницы
* req -запрос
* res - ответ
* next - продолжить выполнение, без вызова этого метода, страница не загрузится
*/
module.exports = function(req, res, next){
res.locals.isAuth = req.session.isAuthenticated;//res.locals - в шаблонах можно обращаться {{isAuth}}
next();
};
**routes/auth.js**
const {Router} = require('express');//модуль express
const router = Router();//инициируем роутер
/**
* Страница /auth/login
*/
router.get('/login',(req, res) => {
res.render('auth/login',{//шаблон template/auth/login.hbs
title: 'авторизация'
});
});
/**
* Авторизуем пользователя
*/
router.post('/login', async (req, res) => {
req.session.isAuthenticated = true;//добавить в сессию свойство isAuthenticated = true
res.redirect('/');//редирект на главную страницу
});
/**
* выйти из аккаунта
*/
router.get('/logout', async (req, res) => {
//req.session.isAuthenticated = false;
req.session.destroy(() => {//уничтожить сессию
res.redirect('/auth/login#login');//калбек сработает после уничтожения сессии
});
});
module.exports = router;//Экспортирум роутер