главная/Node JS: аутентификация и авторизация, Passport и JWT
Node JS - jwt

Node JS: аутентификация и авторизация, Passport и JWT

Давайте рассмотрим процесс создания системы аутентификации и авторизации с использованием Node.js, Passport и JSON Web Tokens JWT. Следуйте приведенным ниже шагам, чтобы настроить аутентификацию и авторизацию для вашего веб-приложения.

Установка зависимостей

npm init
npm install express passport passport-jwt jsonwebtoken bcryptjs body-parser

Настройка сервера

Создайте файл index.js и импортируйте необходимые библиотеки:

const express = require('express');
const bodyParser = require('body-parser');
const passport = require('passport');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');

const app = express();
app.use(bodyParser.json());

Создание модели пользователя

Создайте простую модель пользователя с методами для создания и поиска:

const users = [];

function createUser(username, password) {
  const salt = bcrypt.genSaltSync(10);
  const hashedPassword = bcrypt.hashSync(password, salt);
  const user = { id: users.length + 1, username, password: hashedPassword };
  users.push(user);
  return user;
}

function getUser(username) {
  return users.find(user => user.username === username);
}

Настройка Passport и JWT

Создайте функцию, которая будет проверять токен:

const jwtOptions = {
  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
  secretOrKey: 'your_jwt_secret'
};

passport.use(new JwtStrategy(jwtOptions, (jwtPayload, done) => {
  const user = getUser(jwtPayload.username);

  if (user) {
    done(null, user);
  } else {
    done(null, false);
  }
}));

app.use(passport.initialize());

Создание маршрутов для аутентификации и авторизации

Добавьте маршруты для регистрации, входа и проверки авторизации:

app.post('/register', (req, res) => {
  const { username, password } = req.body;
  const user = createUser(username, password);
  res.json({ success: true, user });
});

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = getUser(username);

  if (!user || !bcrypt.compareSync(password, user.password)) {
    res.status(401).json({ success: false, message: 'Invalid username or password' });
    return;
  }

  const token = jwt.sign({ username: user.username }, jwtOptions.secretOrKey);
  res.json({ success: true, token });
});

app.get('/protected', passport.authenticate('jwt', { session: false }), (req, res) => {
    res.json({ success: true, message: 'Welcome to the protected route!' });
});

// Запуск сервера
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
    console.log('Server is running on port ' + PORT);
});

Теперь у вас есть рабочее веб-приложение с аутентификацией и авторизацией.

Для тестирования своего приложения вы можете использовать инструменты, такие как Postman, чтобы отправлять запросы к вашему серверу и проверить корректность работы системы аутентификации и авторизации.

Это основа, на которой можно строить более сложные системы аутентификации и авторизации с использованием баз данных и других инструментов, в зависимости от требований вашего приложения.