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

Userfront — это фреймворк, который помогает устранить проблемы, связанные с аутентификацией. Это полнофункциональное решение, которое автоматически обновляется и упрощает работу с аутентификацией в приложении React.

НЕОБХОДИМЫЕ УСЛОВИЯ

Для этого руководства очень необходимо хорошее понимание React и React Router. Эти технологии имеют основополагающее значение для построения и навигации по компонентам и маршрутам в приложении React. Документация React — хорошее место для начала.

НАСТРОЙКА ПРОЕКТА

Мы будем использовать Code Sandbox для настройки нового приложения React, а не загружать файлы локально с помощью CRA.

Чтобы быстро настроить шаблон React в песочнице Code, откройте новую вкладку в браузере и введите react.new .

Затем в разделе зависимостей найдите «@userfront/react» и «react-router-Dom». Добавьте эти два пакета в проект.

В нашем приложении React мы создадим пару файлов для настройки маршрутизации, необходимой для аутентификации. Создайте следующие файлы:

СОЗДАНИЕ МАРШРУТОВ

После создания этих файлов замените содержимое App.js на это:

import Home from "./Home";
import Login from "./Login";
import Reset from "./Reset";
import Dashboard from "./Dashboard";
import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";

export default function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/login">Login</Link>
            </li>
            <li>
              <Link to="/reset">Reset</Link>
            </li>
            <li>
              <Link to="/dashboard">Dashboard</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/login" element={<Login />} />
          <Route path="/reset" element={<Reset />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </div>
    </Router>
  );
}

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

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

Возвращаясь к нашему коду, замените свой Home.js контент следующим:

import Userfront from "@userfront/react";

Userfront.init("xbrxpjwb");

const SignupForm = Userfront.build({
  toolId: "lldrbnd"
});

function Home() {
  return (
    <>
      <h1>Home</h1>
      <SignupForm />
    </>
  );
}
export default Home;

А вот и красота Userfront. Просто импортировав пользовательский интерфейс и инициализировав его, мы можем отобразить компонент <SignupForm/>, и на нашей домашней странице появится форма регистрации.

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

Перейдите к своему Login.js и замените его содержимое следующим:

import Userfront from "@userfront/react";

Userfront.init("xbrxpjwb");

const LoginForm = Userfront.build({
  toolId: "kdlbkmd"
});

function Login() {
  return (
    <>
      <h2>Login</h2>
      <LoginForm />
    </>
  );
}
export default Login;

Замените Reset.js на это:

import Userfront from "@userfront/react";
Userfront.init("xbrxpjwb");

const PasswordResetForm = Userfront.build({
  toolId: "dkrbanb"
});

function Reset() {
  return (
    <>
      <h2>Reset</h2>
      <PasswordResetForm />
    </>
  );
}
export default Reset;

Вот пример того, как должно выглядеть ваше приложение:



ЗАЩИЩЕННЫЕ МАРШРУТЫ

Мы бы не хотели, чтобы пользователь просматривал панель мониторинга, если он не авторизовался. Если он попытается перейти на панель мониторинга, не войдя в систему, мы перенаправим его на страницу входа.

Для этого мы заключаем компонент <Dashboard /> в компонент <RequireAuth />, который проверяет, вошел ли пользователь в систему. Когда пользователь входит в систему, его токен доступа доступен как Userfront.tokens.accessToken, поэтому мы проверяем это.

Компонент RequireAuth использует Navigate и useLocation из React Router для перенаправления браузера, если маркер доступа отсутствует.

import Userfront from "@userfront/react";
import Home from "./Home";
import Login from "./Login";
import Reset from "./Reset";
import Dashboard from "./Dashboard";
import {
  BrowserRouter as Router,
  Routes,
  Route,
  Link,
  Navigate,
  useLocation
} from "react-router-dom";

export default function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/login">Login</Link>
            </li>
            <li>
              <Link to="/reset">Reset</Link>
            </li>
            <li>
              <Link to="/dashboard">Dashboard</Link>
            </li>
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/login" element={<Login />} />
          <Route path="/reset" element={<Reset />} />
          <Route
            path="/dashboard"
            element={
              <RequireAuth>
                <Dashboard />
              </RequireAuth>
            }
          />
        </Routes>
      </div>
    </Router>
  );
}

function RequireAuth({ children }) {
  let location = useLocation();
  if (!Userfront.tokens.accessToken) {
    // Redirect to the /login page
    return <Navigate to="/login" state={{ from: location }} replace />;
  }

  return children;
}

Предварительный просмотр приборной панели:

Теперь пользователь вошел в систему, он может просматривать панель инструментов. Если пользователь не авторизован, он будет перенаправлен на страницу авторизации.

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

SSO (вариант единого входа)

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

Для этого создайте приложение с поставщиком удостоверений (например, Facebook), а затем добавьте эти учетные данные SSO на панель управления Userfront. Результатом является модифицированный знак опыта.

Заключение

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