Tutorial: Adicionar componentes funcionais de entrada e saída em um aplicativo de página única do React
Os componentes funcionais são os blocos de construção dos aplicativos React. Este tutorial demonstra como os componentes funcionais podem ser usados para criar a experiência de entrada e saída em um aplicativo de página única (SPA) React. O useMsal
gancho é usado para recuperar um token de acesso para permitir o login do usuário.
Neste tutorial:
- Adicionar componentes ao aplicativo
- Criar 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
- Adicionar as experiências de entrada e saída
Pré-requisitos
- Conclusão dos pré-requisitos e etapas em Tutorial: Preparar um aplicativo para autenticação.
Adicionar o componente de layout de página
Abra PageLayout.jsx e adicione o seguinte código para renderizar o layout da página. O gancho useIsAuthenticated retorna se um usuário está 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} </> ); };
Guarde o ficheiro.
Exibir informações do perfil
Abra o 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> ); };
Guarde o ficheiro.
Adicionar a experiência de início de sessão
Abra SignInButton.jsx e adicione o código a seguir, que cria um botão que entra no 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> ); };
Guarde o ficheiro.
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> ); };
Guarde o ficheiro.