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