Dela via


Självstudie: Lägga till funktionella komponenter för inloggning och utloggning i en React-app med en enda sida

Gäller för: Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för personalklienter.Personalklienter Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för externa klienter. Externa klienter (läs mer)

I den här handledningen kommer du att konfigurera en React-baserad enkel-sida applikation för att hantera autentisering. I del 1 i den här serienskapade du ett React SPA och förberedde det för autentisering. I den här självstudien får du lära dig hur du lägger till autentiseringsflöden genom att lägga till Microsoft Authentication Library (MSAL) funktionella komponenter i din app och skapa ett dynamiskt användargränssnitt (UI) för din app.

I den här handledningen kommer du att:

  • Lägga till funktionella komponenter i programmet
  • Skapa ett sätt att visa användarens profilinformation
  • Skapa en layout som visar inloggnings- och utloggningsupplevelsen
  • Lägg till inloggnings- och utloggningsfunktionerna

Förutsättningar

Lägga till funktionella komponenter i programmet

Funktionella komponenter är byggstenarna i React-appar och används för att skapa inloggnings- och utloggningsupplevelserna i ditt program.

Lägg till komponenten NavigationBar

Navigeringsfältet tillhandahåller inloggnings- och utloggningsupplevelsen för appen. Instansvariabeln som tidigare angetts i filen index.js används för att anropa inloggnings- och utloggningsmetoderna, som omdirigerar användaren till tillbaka till inloggningssidan.

  1. Öppna src/components/NavigationBar.jsx och lägg till följande kodfragment;

    import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';
    import { Navbar, Button } from 'react-bootstrap';
    import { loginRequest } from '../authConfig';
    
    export const NavigationBar = () => {
        const { instance } = useMsal();
    
        const handleLoginRedirect = () => {
            instance.loginRedirect(loginRequest).catch((error) => console.log(error));
        };
    
        const handleLogoutRedirect = () => {
            instance.logoutRedirect().catch((error) => console.log(error));
        };
    
        /**
         * Most applications will need to conditionally render certain components based on whether a user is signed in or not.
         * msal-react provides 2 easy ways to do this. AuthenticatedTemplate and UnauthenticatedTemplate components will
         * only render their children if a user is authenticated or unauthenticated, respectively.
         */
        return (
            <>
                <Navbar bg="primary" variant="dark" className="navbarStyle">
                    <a className="navbar-brand" href="/">
                        Microsoft identity platform
                    </a>
                    <AuthenticatedTemplate>
                        <div className="collapse navbar-collapse justify-content-end">
                            <Button variant="warning" onClick={handleLogoutRedirect}>
                                Sign out
                            </Button>
                        </div>
                    </AuthenticatedTemplate>
                    <UnauthenticatedTemplate>
                        <div className="collapse navbar-collapse justify-content-end">
                            <Button onClick={handleLoginRedirect}>Sign in</Button>
                        </div>
                    </UnauthenticatedTemplate>
                </Navbar>
            </>
        );
    };
    
  2. Spara filen.

Lägg till PageLayout-komponenten

PageLayout-komponenten används för att visa appens huvudinnehåll och kan anpassas för att inkludera allt ytterligare innehåll som du vill visa på varje sida i appen. Användarens profilinformation visas genom att informationen skickas via rekvisita.

  1. Öppna src/components/PageLayout.jsx och lägg till följande kodfragment;

    import { AuthenticatedTemplate } from '@azure/msal-react';
    
    import { NavigationBar } from './NavigationBar.jsx';
    
    export const PageLayout = (props) => {
        /**
         * Most applications will need to conditionally render certain components based on whether a user is signed in or not.
         * msal-react provides 2 easy ways to do this. AuthenticatedTemplate and UnauthenticatedTemplate components will
         * only render their children if a user is authenticated or unauthenticated, respectively.
         */
        return (
            <>
                <NavigationBar />
                <br />
                <h5>
                    <center>Welcome to the Microsoft Authentication Library For React Tutorial</center>
                </h5>
                <br />
                {props.children}
                <br />
                <AuthenticatedTemplate>
                    <footer>
                        <center>
                            How did we do?
                            <a
                                href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR_ivMYEeUKlEq8CxnMPgdNZUNDlUTTk2NVNYQkZSSjdaTk5KT1o4V1VVNS4u"
                                rel="noopener noreferrer"
                                target="_blank"
                            >
                                {' '}
                                Share your experience!
                            </a>
                        </center>
                    </footer>
                </AuthenticatedTemplate>
            </>
        );
    }
    
  2. Spara filen.

Lägg till DataDisplay-komponenten

Komponenten DataDisplay används för att visa användarens profilinformation och en tabell med anspråk som skapas i nästa avsnitt i självstudien. Komponenten IdTokenData används för att visa anspråken i ID-token.

  1. Öppna src/components/DataDisplay.jsx och lägg till följande kodfragment.

    import { Table } from 'react-bootstrap';
    import { createClaimsTable } from '../utils/claimUtils';
    
    import '../styles/App.css';
    
    export const IdTokenData = (props) => {
        const tokenClaims = createClaimsTable(props.idTokenClaims);
    
        const tableRow = Object.keys(tokenClaims).map((key, index) => {
            return (
                <tr key={key}>
                    {tokenClaims[key].map((claimItem) => (
                        <td key={claimItem}>{claimItem}</td>
                    ))}
                </tr>
            );
        });
        return (
            <>
                <div className="data-area-div">
                    <p>
                        See below the claims in your <strong> ID token </strong>. For more information, visit:{' '}
                        <span>
                            <a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#claims-in-an-id-token">
                                docs.microsoft.com
                            </a>
                        </span>
                    </p>
                    <div className="data-area-div">
                        <Table responsive striped bordered hover>
                            <thead>
                                <tr>
                                    <th>Claim</th>
                                    <th>Value</th>
                                    <th>Description</th>
                                </tr>
                            </thead>
                            <tbody>{tableRow}</tbody>
                        </Table>
                    </div>
                </div>
            </>
        );
    };
    
  2. Spara filen.

Nästa steg