Инструменты пользователя

Инструменты сайта


nodejs:sessija_i_avtorizacijam:sessija

сессия

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;//Экспортирум роутер
nodejs/sessija_i_avtorizacijam/sessija.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)