Аутентификация на основе сеанса — это широко используемый метод реализации аутентификации пользователей в приложениях NodeJS. Он включает использование идентификатора сеанса для отслеживания статуса аутентификации пользователя по нескольким запросам. В этом руководстве мы рассмотрим основы аутентификации на основе сеансов и способы ее реализации в приложении NodeJS.
Как работает аутентификация на основе сеанса
Когда пользователь входит в систему аутентификации на основе сеанса, идентификатор сеанса создается на сервере и отправляется клиенту в виде файла cookie. Затем файл cookie включается во все последующие запросы от клиента к серверу, позволяя серверу идентифицировать пользователя и его статус аутентификации.
Когда пользователь выходит из системы, идентификатор сеанса удаляется с сервера и клиента, что фактически завершает сеанс и выводит пользователя из системы.
Реализация аутентификации на основе сеанса в NodeJS
Вот шаги для реализации аутентификации на основе сеанса в приложении NodeJS:
- Установите пакет
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. Используя идентификатор сеанса для отслеживания статуса аутентификации пользователя, аутентификация на основе сеанса обеспечивает простой и эффективный способ защиты маршрутов и ресурсов приложений.