Didacticiel : Ajouter des composants fonctionnels pour la connexion et la déconnexion dans une application monopage React
Les composants fonctionnels sont les blocs de construction d’applications React. Ce didacticiel montre comment les composants fonctionnels peuvent être utilisés pour générer l’expérience de connexion et de déconnexion dans une application monopage React (SPA). Le hook useMsal
est utilisé pour récupérer un jeton d’accès pour permettre la connexion d’un utilisateur.
Dans ce tutoriel, vous allez :
- Ajouter des composants à l’application
- Créer un moyen d’afficher les informations de profil de l’utilisateur
- Créer une disposition qui affiche l’expérience de connexion et de déconnexion
- Ajouter les expériences de connexion et de déconnexion
Prérequis
- Achèvement des prérequis et des étapes du Tutoriel : préparer une application pour l’authentification.
Ajouter le composant de la mise en page
Ouvrez PageLayout.jsx et ajoutez le code suivant pour afficher la mise en page. Le hook useIsAuthenticated indique si un utilisateur est actuellement connecté ou non.
/* * 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} </> ); };
Enregistrez le fichier .
Afficher les informations de profil
Ouvrez ProfileData.jsx et ajoutez le code suivant, qui crée un composant qui affiche les informations de profil de l’utilisateur :
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> ); };
Enregistrez le fichier .
Ajouter l’expérience de connexion
Ouvrez SignInButton.jsx et ajoutez le code suivant, qui crée un bouton qui connecte l’utilisateur via une fenêtre contextuelle ou une redirection.
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> ); };
Enregistrez le fichier .
Ajout de l’expérience de déconnexion
Ouvrez SignOutButton.jsx et ajoutez le code suivant, qui crée un bouton qui déconnecte l’utilisateur à l’aide d’une fenêtre contextuelle ou d’une redirection.
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> ); };
Enregistrez le fichier.