Sobes.tech
Назад к вопросам
Junior — Middle
86

Предоставлял ли ты решение по реализации системы аутентификации и авторизации в приложениях на Node.js?

Ответ от нейросети

sobes.tech AI

Да, для реализации системы аутентификации и авторизации в Node.js часто используют следующие подходы:

  • Аутентификация с помощью JWT (JSON Web Tokens): пользователь вводит логин и пароль, сервер проверяет их, и при успешной аутентификации выдает токен, который клиент передает в заголовках для доступа к защищенным ресурсам.

  • Использование middleware, например, Passport.js, который поддерживает множество стратегий аутентификации (локальная, OAuth, JWT и др.).

  • Авторизация реализуется через проверку ролей или прав пользователя, которые хранятся в базе или в токене.

Пример простейшей аутентификации с JWT:

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.use(express.json());

const users = [{ id: 1, username: 'user', password: 'pass', role: 'admin' }];

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username && u.password === password);
  if (!user) return res.status(401).send('Invalid credentials');

  const token = jwt.sign({ id: user.id, role: user.role }, 'secretKey', { expiresIn: '1h' });
  res.json({ token });
});

function authMiddleware(req, res, next) {
  const authHeader = req.headers.authorization;
  if (!authHeader) return res.status(401).send('No token');

  const token = authHeader.split(' ')[1];
  jwt.verify(token, 'secretKey', (err, user) => {
    if (err) return res.status(403).send('Invalid token');
    req.user = user;
    next();
  });
}

app.get('/protected', authMiddleware, (req, res) => {
  if (req.user.role !== 'admin') return res.status(403).send('Forbidden');
  res.send('Protected data');
});

app.listen(3000);

Такой подход обеспечивает базовую защиту и разграничение доступа в приложениях на Node.js.