Чтобы создать конечную точку аутентификации с помощью express.js, вы можете выполнить следующие шаги:
ШАГ 1. Установите пакеты jsonwebtoken и bcrypt npm в свое экспресс-приложение:
npm install jsonwebtoken bcrypt
ШАГ 2 – импортируйте пакеты jsonwebtoken и bcrypt в экспресс-приложение:
const jwt = require('jsonwebtoken'); const bcrypt = require('bcrypt');
ШАГ 3. Создайте обработчик маршрута для конечной точки аутентификации. Это будет конечная точкаPOST
, которая принимает имя пользователя и пароль в качестве входных данных пользователя и возвращает JWT, если аутентификация прошла успешно:
app.post('/auth', (req, res) => { // retrieve the user's credentials from the request body const { username, password } = req.body; // query the database for a user with the provided username User.findOne({ username }, (err, user) => { if (err) { // handle errors return res.status(500).json({ error: 'Error querying the database' }); } if (!user) { // handle invalid username return res.status(401).json({ error: 'Invalid username or password' }); } // compare the provided password with the hashed password in the database bcrypt.compare(password, user.password, (err, match) => { if (err) { // handle errors return res.status(500).json({ error: 'Error querying the database' }); } if (!match) { // handle invalid password return res.status(401).json({ error: 'Invalid username or password' }); } // generate a JSON web token for the authenticated user const token = jwt.sign({ username: user.username }, process.env.SECRET_KEY); // return the token to the client return res.json({ token }); }); }); });
ШАГ 4. Как было сказано ранее, эта конечная точка получит запрос POST
с учетными данными пользователя в теле запроса. Он запросит в базе данных пользователя с указанным именем пользователя, а затем с помощью bcrypt сравнит предоставленный пароль с хешированным паролем, хранящимся в базе данных. Если пароли совпадают, он сгенерирует веб-токен JSON для аутентифицированного пользователя и вернет его клиенту. Если имя пользователя или пароль недействительны, будет возвращено сообщение об ошибке.
ШАГ 5. Имея эту конечную точку аутентификации, вы теперь можете создавать дополнительные маршруты API, требующие аутентификации, используя метод jsonwebtoken.verify() для проверки JWT, предоставленного клиентом:
app.get('/api/users', (req, res) => { // Get the JWT from the request headers const token = req.headers['x-access-token']; // Verify the JWT and get the user's information jwt.verify(token, 'secret_key', (err, user) => { if (err) { // Return an error if the JWT is invalid return res.status(401).json({ error: 'Invalid token' }); } // Return the list of users res.json([ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, { id: 3, name: 'Carol' }, ]); }); });
Это всего лишь один из возможных подходов к созданию конечной точки аутентификации с помощью express.js. Существует множество различных способов реализации аутентификации и авторизации в экспресс-приложении, и конкретный подход, который вы выберете, будет зависеть от потребностей вашего приложения.