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, чтобы отправлять запросы к вашему серверу и проверить корректность работы системы аутентификации и авторизации.
Это основа, на которой можно строить более сложные системы аутентификации и авторизации с использованием баз данных и других инструментов, в зависимости от требований вашего приложения.