Freigeben über


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

Fügen sie die PageLayout-Komponente hinzu

  1. Ö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}
        </>
      );
    };
    
  2. Speichern Sie die Datei .

Profilinformationen anzeigen

  1. Ö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>
      );
    };
    
  2. Speichern Sie die Datei .

Anmeldeoberfläche hinzufügen

  1. Ö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>
      );
    };
    
  2. Speichern Sie die Datei .

Abmeldeoberfläche hinzufügen

  1. Ö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>
      );
    };
    
  2. Speichern Sie die Datei .

Nächste Schritte