Tutorial: adicionar componentes funcionais de entrada e saída em um aplicativo de página única do React
Componentes funcionais são os blocos de construção de aplicativos React. Este tutorial demonstra como os componentes funcionais podem ser usados para criar a experiência de entrada e saída em um SPA (aplicativo de página única) React. O gancho useMsal
é usado para recuperar um token de acesso para permitir que o usuário entre.
Neste tutorial:
- Adicione componentes ao aplicativo
- Crie uma maneira de exibir as informações de perfil do usuário
- Crie um layout que exiba a experiência de entrada e saída
- Adicione as experiências de entrada e saída
Pré-requisitos
- Conclusão dos pré-requisitos e etapas no Tutorial: Preparar um aplicativo para autenticação.
Adicionar o componente de layout de página
Abra PageLayout.jsx e adicione o código a seguir para renderizar o layout da página. O gancho useIsAuthenticated retorna se um usuário está ou não conectado no momento.
/* * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import React from "react"; import Navbar from "react-bootstrap/Navbar"; import { useIsAuthenticated } from "@azure/msal-react"; import { SignInButton } from "./SignInButton"; import { SignOutButton } from "./SignOutButton"; /** * Renders the navbar component with a sign in or sign out button depending on whether or not a user is authenticated * @param props */ export const PageLayout = (props) => { const isAuthenticated = useIsAuthenticated(); return ( <> <Navbar bg="primary" variant="dark" className="navbarStyle"> <a className="navbar-brand" href="/"> Microsoft Identity Platform </a> <div className="collapse navbar-collapse justify-content-end"> {isAuthenticated ? <SignOutButton /> : <SignInButton />} </div> </Navbar> <br /> <br /> <h5> <center> Welcome to the Microsoft Authentication Library For JavaScript - React SPA Tutorial </center> </h5> <br /> <br /> {props.children} </> ); };
Salve o arquivo.
Exibir informações de perfil
Abra ProfileData.jsx e adicione o seguinte código, que cria um componente que exibe as informações de perfil do usuário:
import React from "react"; /** * Renders information about the user obtained from MS Graph * @param props */ export const ProfileData = (props) => { return ( <div id="profile-div"> <p> <strong>First Name: </strong> {props.graphData.givenName} </p> <p> <strong>Last Name: </strong> {props.graphData.surname} </p> <p> <strong>Email: </strong> {props.graphData.userPrincipalName} </p> <p> <strong>Id: </strong> {props.graphData.id} </p> </div> ); };
Salve o arquivo.
Adicionando a experiência de entrada
Abra SignInButton.jsx e adicione o código a seguir, que cria um botão que conecta o usuário usando um pop-up ou redirecionamento.
import React from "react"; import { useMsal } from "@azure/msal-react"; import { loginRequest } from "../authConfig"; import DropdownButton from "react-bootstrap/DropdownButton"; import Dropdown from "react-bootstrap/Dropdown"; /** * Renders a drop down button with child buttons for logging in with a popup or redirect * Note the [useMsal] package */ export const SignInButton = () => { const { instance } = useMsal(); const handleLogin = (loginType) => { if (loginType === "popup") { instance.loginPopup(loginRequest).catch((e) => { console.log(e); }); } else if (loginType === "redirect") { instance.loginRedirect(loginRequest).catch((e) => { console.log(e); }); } }; return ( <DropdownButton variant="secondary" className="ml-auto" drop="start" title="Sign In" > <Dropdown.Item as="button" onClick={() => handleLogin("popup")}> Sign in using Popup </Dropdown.Item> <Dropdown.Item as="button" onClick={() => handleLogin("redirect")}> Sign in using Redirect </Dropdown.Item> </DropdownButton> ); };
Salve o arquivo.
Adicionando a experiência de saída
Abra SignOutButton.jsx e adicione o código a seguir, que cria um botão que desconecta o usuário usando um pop-up ou redirecionamento.
import React from "react"; import { useMsal } from "@azure/msal-react"; import DropdownButton from "react-bootstrap/DropdownButton"; import Dropdown from "react-bootstrap/Dropdown"; /** * Renders a sign out button */ export const SignOutButton = () => { const { instance } = useMsal(); const handleLogout = (logoutType) => { if (logoutType === "popup") { instance.logoutPopup({ postLogoutRedirectUri: "/", mainWindowRedirectUri: "/", }); } else if (logoutType === "redirect") { instance.logoutRedirect({ postLogoutRedirectUri: "/", }); } }; return ( <DropdownButton variant="secondary" className="ml-auto" drop="start" title="Sign Out" > <Dropdown.Item as="button" onClick={() => handleLogout("popup")}> Sign out using Popup </Dropdown.Item> <Dropdown.Item as="button" onClick={() => handleLogout("redirect")}> Sign out using Redirect </Dropdown.Item> </DropdownButton> ); };
Salve o arquivo.