Вы когда-нибудь хотели создать приложение, в котором есть разные пользователи, которые будут использовать приложение?

Несколько вопросов должны быть там в вашем уме. Как вы собираетесь ограничивать пользователей для определенного действия? Как вы управляете безопасностью системы в этом случае? Как, черт возьми, вы должны создать для них токен.

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

Предпосылка

Мы собираемся использовать Node Js и Express для создания API, а затем добавим к нему доступ на основе ролей. Конечно, мы добавим кучу библиотек, которые помогут нам.

Цель

Мы будем создавать серверную часть банковского приложения, которая будет иметь 3 типа пользователей.

  • Клиент
  • Агент
  • Администратор

Мы будем генерировать разные токены для каждого из них и добавлять ограничения в зависимости от роли. Например, клиент может получить свою информацию, агент может добавить/обновить учетную запись, а администратор может одобрить этого пользователя. Но пока мы будем избегать основной логики регистрации/добавления/обновления/утверждения учетной записи. Мы будем писать глупый код только для того, чтобы сосредоточиться только на доступе на основе ролей.

Начать

Мы будем клонировать repo для начала работы или если вам нужен полный код, вы можете переключить ветку в любое время. Это просто папка с готовым экспресс-приложением, работающим на порту 8080, вам просто нужно потянуть, а затем запустить npm install и npm run dev. Код простой, у вас есть куча роутов и соответствующих контроллеров с вызовом обратного вызова с пустым мидлваром.

Мы начнем с отправки сообщений об успешном завершении со всех маршрутов. Так же, как на изображении ниже.

Как я уже упоминал, мы не будем создавать никакой управляющей логики, поэтому просто добавим какой-нибудь мусорный код для генерации случайных типов пользователей (что поможет нам получить для них разные значения токенов).

Обновленный код будет выглядеть так,

Теперь давайте создадим набор файлов, которые нам помогут. Сначала добавьте папку /lib и под ней создайте файл Authentication.js и установите пакет с именем jsonwebtoken. Как только этот пакет будет установлен, он предоставит нам множество методов для использования, но мы в основном сосредоточены на создании токена и его проверке.

Теперь давайте добавим промежуточное ПО с именем AuthenticateRoles.js в папку /middlewares.

Здесь это решающий шаг. Во-первых, нам нужно определить, какие роли мы хотим аутентифицировать, и создать подфункцию на основе этого, и, наконец, создать основную функцию, которая будет заниматься фактической аутентификацией, и, наконец, мы можем прикрепить идентификатор пользователя к параметр req.user.

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

Теперь пришло время увидеть все в действии. Идите вперед и внесите изменения в маршруты и API входа.

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

А теперь последний шаг,

Если вы идете по маршруту: http://localhost:8080/api/login

Вы можете играть на любом из этих маршрутов, чтобы проверить, работает ли токен правильно или нет.

  • http://localhost:8080/api/account [пут]
  • http://localhost:8080/api/ учетная запись
  • http://localhost:8080/api/ одобрить

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

Спасибо за чтение :)