Аутентификация на основе сеанса — это широко используемый метод реализации аутентификации пользователей в приложениях NodeJS. Он включает использование идентификатора сеанса для отслеживания статуса аутентификации пользователя по нескольким запросам. В этом руководстве мы рассмотрим основы аутентификации на основе сеансов и способы ее реализации в приложении NodeJS.

Как работает аутентификация на основе сеанса

Когда пользователь входит в систему аутентификации на основе сеанса, идентификатор сеанса создается на сервере и отправляется клиенту в виде файла cookie. Затем файл cookie включается во все последующие запросы от клиента к серверу, позволяя серверу идентифицировать пользователя и его статус аутентификации.

Когда пользователь выходит из системы, идентификатор сеанса удаляется с сервера и клиента, что фактически завершает сеанс и выводит пользователя из системы.

Реализация аутентификации на основе сеанса в NodeJS

Вот шаги для реализации аутентификации на основе сеанса в приложении NodeJS:

  1. Установите пакет express-session, который является промежуточным программным обеспечением для управления сеансами пользователей:
npm install express-session

2. Настройте промежуточное программное обеспечение сеанса в своем приложении:

const session = require('express-session');

app.use(session({
    secret: 'my-secret-key',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true }
}));

В приведенном выше примере мы используем промежуточное ПО session из пакета express-session для настройки пользовательских сеансов. Мы передаем секретный ключ, который используется для подписи файла cookie сеанса и предотвращения несанкционированного доступа. Мы также устанавливаем для параметров resave и saveUninitialized значения false и true соответственно, чтобы оптимизировать хранилище сеансов. Наконец, мы устанавливаем для параметра secure значение true, чтобы убедиться, что файл cookie сеанса отправляется только через HTTPS.

3. Создайте маршрут входа, который устанавливает идентификатор сеанса, когда пользователь входит в систему:

app.post('/login', (req, res) => {
    // Validate user credentials
    if (validCredentials) {
        req.session.userId = userId; // Set session identifier
        res.redirect('/dashboard');
    } else {
        res.render('login', { error: 'Invalid username or password' });
    }
});

В приведенном выше примере мы устанавливаем значение userId в сеансе пользователя при входе в систему. Это значение можно использовать для получения информации о пользователе и статусе аутентификации в последующих запросах.

4. Создайте промежуточное ПО, которое проверяет идентификатор сеанса в каждом запросе:

const requireAuth = (req, res, next) => {
    if (req.session.userId) {
        next(); // User is authenticated, continue to next middleware
    } else {
        res.redirect('/login'); // User is not authenticated, redirect to login page
    }
}

В приведенном выше примере мы создаем промежуточное ПО с именем requireAuth, которое проверяет значение userId в сеансе пользователя. Если значение присутствует, ПО промежуточного слоя вызывает функцию next, позволяя продолжить запрос к следующему ПО промежуточного слоя или обработчику маршрута. Если значение отсутствует, промежуточное ПО перенаправляет пользователя на страницу входа.

5. Используйте промежуточное ПО requireAuth для защиты маршрутов, требующих аутентификации:

app.get('/dashboard', requireAuth, (req, res) => {
    // Render the dashboard page
});

В приведенном выше примере мы используем промежуточное ПО requireAuth для защиты маршрута /dashboard, гарантируя, что к нему смогут получить доступ только аутентифицированные пользователи.

Заключение

Аутентификация на основе сеанса — это популярный метод реализации аутентификации пользователей в приложениях NodeJS. Используя идентификатор сеанса для отслеживания статуса аутентификации пользователя, аутентификация на основе сеанса обеспечивает простой и эффективный способ защиты маршрутов и ресурсов приложений.