Руководство: добавить функциональные компоненты входа и выхода в одностраничное приложение React
В этом руководстве описана настройка одностраничного приложения React для проверки подлинности. В части 1 этой сериивы создали React SPA и подготовили его для аутентификации. В этом руководстве вы узнаете, как добавить потоки проверки подлинности, добавив библиотеку проверки подлинности Майкрософт (MSAL) функциональные компоненты в приложение и создайте адаптивный пользовательский интерфейс для приложения.
В этом руководстве:
- Добавление функциональных компонентов в приложение
- Создание способа отображения сведений профиля пользователя
- Создание макета, отображающего интерфейс входа и выхода
- Добавление возможностей входа и выхода
Необходимые условия
- Завершение предварительных требований и шагов в учебнике. Подготовка приложения для проверки подлинности.
Добавление функциональных компонентов в приложение
Функциональные компоненты — это стандартные блоки приложений React и используются для создания возможностей входа и выхода в приложении.
Добавление компонента NavigationBar
Панель навигации предоставит возможность входа и выхода для приложения. Переменная экземпляра, установленная ранее в файле index.js, будет использоваться для вызова методов входа и выхода, которые перенаправят пользователя обратно на страницу входа.
Откройте src/components/NavigationBar.jsx и добавьте следующий фрагмент кода;
import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react'; import { Navbar, Button } from 'react-bootstrap'; import { loginRequest } from '../authConfig'; export const NavigationBar = () => { const { instance } = useMsal(); const handleLoginRedirect = () => { instance.loginRedirect(loginRequest).catch((error) => console.log(error)); }; const handleLogoutRedirect = () => { instance.logoutRedirect().catch((error) => console.log(error)); }; /** * Most applications will need to conditionally render certain components based on whether a user is signed in or not. * msal-react provides 2 easy ways to do this. AuthenticatedTemplate and UnauthenticatedTemplate components will * only render their children if a user is authenticated or unauthenticated, respectively. */ return ( <> <Navbar bg="primary" variant="dark" className="navbarStyle"> <a className="navbar-brand" href="/"> Microsoft identity platform </a> <AuthenticatedTemplate> <div className="collapse navbar-collapse justify-content-end"> <Button variant="warning" onClick={handleLogoutRedirect}> Sign out </Button> </div> </AuthenticatedTemplate> <UnauthenticatedTemplate> <div className="collapse navbar-collapse justify-content-end"> <Button onClick={handleLoginRedirect}>Sign in</Button> </div> </UnauthenticatedTemplate> </Navbar> </> ); };
Сохраните файл.
Добавление компонента PageLayout
Компонент PageLayout будет использоваться для отображения основного содержимого приложения и может быть настроен для включения любого дополнительного содержимого, которое вы хотите отобразить на каждой странице приложения. Сведения о профиле пользователя отображаются путем передачи информации через реквизиты.
Откройте src/components/PageLayout.jsx и добавьте следующий фрагмент кода;
import { AuthenticatedTemplate } from '@azure/msal-react'; import { NavigationBar } from './NavigationBar.jsx'; export const PageLayout = (props) => { /** * Most applications will need to conditionally render certain components based on whether a user is signed in or not. * msal-react provides 2 easy ways to do this. AuthenticatedTemplate and UnauthenticatedTemplate components will * only render their children if a user is authenticated or unauthenticated, respectively. */ return ( <> <NavigationBar /> <br /> <h5> <center>Welcome to the Microsoft Authentication Library For React Tutorial</center> </h5> <br /> {props.children} <br /> <AuthenticatedTemplate> <footer> <center> How did we do? <a href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR_ivMYEeUKlEq8CxnMPgdNZUNDlUTTk2NVNYQkZSSjdaTk5KT1o4V1VVNS4u" rel="noopener noreferrer" target="_blank" > {' '} Share your experience! </a> </center> </footer> </AuthenticatedTemplate> </> ); }
Сохраните файл.
Добавление компонента DataDisplay
Компонент DataDisplay
будет использоваться для отображения сведений профиля пользователя и таблицы утверждений, которые будут созданы в следующем разделе руководства. Компонент IdTokenData
будет использоваться для отображения утверждений в токене идентификатора.
Откройте src/components/DataDisplay.jsx и добавьте следующий фрагмент кода;
import { Table } from 'react-bootstrap'; import { createClaimsTable } from '../utils/claimUtils'; import '../styles/App.css'; export const IdTokenData = (props) => { const tokenClaims = createClaimsTable(props.idTokenClaims); const tableRow = Object.keys(tokenClaims).map((key, index) => { return ( <tr key={key}> {tokenClaims[key].map((claimItem) => ( <td key={claimItem}>{claimItem}</td> ))} </tr> ); }); return ( <> <div className="data-area-div"> <p> See below the claims in your <strong> ID token </strong>. For more information, visit:{' '} <span> <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#claims-in-an-id-token"> docs.microsoft.com </a> </span> </p> <div className="data-area-div"> <Table responsive striped bordered hover> <thead> <tr> <th>Claim</th> <th>Value</th> <th>Description</th> </tr> </thead> <tbody>{tableRow}</tbody> </Table> </div> </div> </> ); };
Сохраните файл.
Дальнейшие действия
руководство по . Вход и выход из React SPA