Система авторизации с использованием JWT (JSON Web Token) становится все более популярной благодаря своей простоте и удобству. В этом ответе мы рассмотрим, как реализовать такую систему на примере веб-приложения.
Шаг 1: Установка необходимых библиотек
- Для начала нам понадобятся некоторые пакеты. Если вы используете Node.js, установите следующие библиотеки:
- jsonwebtoken — для работы с JWT;
- express — для создания сервера;
- body-parser — для обработки входящих данных;
- mongoose — для работы с базой данных MongoDB (если вы используете её).
Вы можете установить эти пакеты с помощью команды:
npm install jsonwebtoken express body-parser mongoose
Шаг 2: Создание сервера
Создайте файл server.js и настройте базовый сервер:
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const jwt = require('jsonwebtoken');
const app = express();
app.use(bodyParser.json());
// Подключение к базе данных
mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
app.listen(3000, () => {
console.log('Сервер запущен на порту 3000');
});
Шаг 3: Создание модели пользователя
Создайте модель для пользователя в MongoDB:
const UserSchema = new mongoose.Schema({
username: { type: String, required: true },
password: { type: String, required: true }
});
const User = mongoose.model('User', UserSchema);
Шаг 4: Регистрация пользователя
Добавьте маршрут для регистрации пользователей:
app.post('/register', async (req, res) => {
const { username, password } = req.body;
const user = new User({ username, password });
await user.save();
res.status(201).send('Пользователь зарегистрирован');
});
Шаг 5: Авторизация и создание JWT
Добавьте маршрут для авторизации, который будет проверять учетные данные пользователя и выдавать токен:
app.post('/login', async (req, res) => {
const { username, password } = req.body;
const user = await User.findOne({ username, password });
if (!user) {
return res.status(401).send('Неверные учетные данные');
}
const token = jwt.sign({ id: user._id }, 'секретный_ключ', { expiresIn: '1h' });
res.json({ token });
});
Шаг 6: Защита маршрутов с помощью JWT
Теперь давайте добавим защиту для некоторых маршрутов с помощью middleware:
function authenticateJWT(req, res, next) {
const token = req.headers['authorization'];
if (token) {
jwt.verify(token, 'секретный_ключ', (err, user) => {
if (err) {
return res.sendStatus(403);
}
req.user = user;
next();
});
} else {
res.sendStatus(401);
}
}
app.get('/protected', authenticateJWT, (req, res) => {
res.send('Это защищенный маршрут');
});
Шаг 7: Запуск сервера
Теперь вы можете запустить сервер с помощью команды:
node server.js
После этого вы можете протестировать регистрацию и авторизацию пользователей, а также доступ к защищенным маршрутам.
Таким образом, мы реализовали простую систему авторизации с использованием JWT. Эта система позволяет безопасно обмениваться информацией между клиентом и сервером и защищает маршруты, требующие авторизации.