Tutorial: Hinzufügen von funktionalen Anmeldungs- und Abmeldungskomponenten zu einer React-SPA
Funktionale Komponenten sind die Bausteine von React-Apps. In diesem Tutorial wird gezeigt, wie funktionale Komponenten zum Erstellen der An- und Abmeldeumgebung in einer React-Single-Page-App (SPA) verwendet werden können. Der useMsal
-Hook wird verwendet, um ein Zugriffstoken abzurufen und so die Benutzeranmeldung zuzulassen.
Dieses Tutorial umfasst folgende Punkte:
- Komponenten zur Anwendung hinzufügen
- Erstellen einer Anzeige für die Profilinformationen des Benutzers
- Erstellen eines Layouts, in dem die An- und Abmeldeoberfläche angezeigt wird
- An- und Abmeldefunktionen hinzufügen
Voraussetzungen
- Abschluss der Voraussetzungen und Schritte im Tutorial: Vorbereiten einer Anwendung für die Authentifizierung
Fügen sie die PageLayout-Komponente hinzu
Öffnen Sie PageLayout.jsx, und fügen Sie den folgenden Code hinzu, um das Seitenlayout zu rendern. Der Hook useIsAuthenticated gibt zurück, ob ein Benutzer gerade angemeldet ist oder nicht.
/* * 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} </> ); };
Speichern Sie die Datei .
Profilinformationen anzeigen
Öffnen Sie ProfileData.jsx, und fügen Sie den folgenden Code hinzu, der eine Komponente erstellt, die die Profilinformationen des Benutzers anzeigt:
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> ); };
Speichern Sie die Datei .
Anmeldeoberfläche hinzufügen
Öffnen Sie SignInButton.jsx, und fügen Sie den folgenden Code hinzu, wodurch eine Schaltfläche erstellt wird, die den Benutzer entweder über ein Pop-up oder eine Umleitung anmeldet.
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> ); };
Speichern Sie die Datei .
Abmeldeoberfläche hinzufügen
Öffnen Sie SignOutButton.jsx, und fügen Sie den folgenden Code hinzu, wodurch eine Schaltfläche erstellt wird, die den Benutzer entweder über ein Popup oder eine Umleitung abmeldet.
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> ); };
Speichern Sie die Datei .