Внедрите авторизацию как профессионал в свой проект React.

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

Проблемное пространство

Безопасность - большая проблема для большого количества компаний. Авторизация и аутентификация обязательны для всех реальных проектов. А Route Guard помогает нам управлять уровнем авторизации микса.

Решение

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

Чтобы узнать больше о Route Guards в Angular, вы можете посетить эту ссылку.

Мы постараемся реализовать те же функции в React.

Что такое Route Guard?

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

Почему нам нужны Route Guards в нашем приложении, потому что это одна очень важная потребность - мы не хотим, чтобы у всех наших пользователей были одинаковые привилегии для всех ресурсов приложения.

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

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

Начало работы с кодом:

Инструменты, которые мы будем использовать:

"react-router-dom": "^5.2.0"

Базовое приложение

RootGuard

В этом Guard мы можем импортировать все различные охранники и обернуть дочерний реквизит их конкретной реализацией и сценарием использования.

AuthGuard

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

Как части работают вместе?

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

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

Root Guard содержит нашу самую первую защиту AuthGuard, которая проверяет разрешения этого приложения и на основе любой логики, которая требуется вашему приложению, вы можете контролировать, какой маршрут должен активироваться.

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

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

Теперь я могу посещать все страницы, кроме списка, и всякий раз, когда я пытаюсь каким-то образом, могу использовать кнопку или напрямую вставлять URL-адрес или какую-то лазейку, о которой я не знаю, каким-то образом она перенаправит меня обратно

Совет

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

Следите за новыми интересными статьями. Мир!

Больше контента на plainenglish.io