Compartir a través de


Tutorial: Adición de componentes funcionales de inicio de sesión y cierre de sesión en una aplicación de página única de React

Se aplica a:Círculo verde con un símbolo de marca de verificación blanca. inquilinos de personal Círculo verde con un símbolo de marca de verificación blanca. inquilinos externos (más información)

En este tutorial configurará una aplicación de página única (SPA) de React para la autenticación. En la parte 1 de esta serie, creaste un SPA de React y lo preparaste para la autenticación. En este tutorial, aprenderá a agregar flujos de autenticación agregando componentes funcionales de la Biblioteca de autenticación de Microsoft (MSAL) a la aplicación y a crear una interfaz de usuario (UI) con capacidad de respuesta para la aplicación.

En este tutorial, harás lo siguiente:

  • Adición de componentes funcionales a la aplicación
  • Crear una forma de mostrar la información del perfil del usuario
  • Crear un diseño que muestre la experiencia de inicio y cierre de sesión
  • Agregar las experiencias de inicio y cierre de sesión

Prerrequisitos

Adición de componentes funcionales a la aplicación

Los componentes funcionales son los bloques de creación de aplicaciones de React y se usan para crear las experiencias de inicio de sesión y cierre de sesión en la aplicación.

Agregar el componente NavigationBar

La barra de navegación proporcionará la experiencia de inicio de sesión y cierre de sesión de la aplicación. La variable de instancia establecida anteriormente en el archivo index.js se usará para llamar a los métodos de inicio de sesión y cierre de sesión, y redirigirá al usuario de regreso a la página de inicio de sesión.

  1. Abra src/components/NavigationBar.jsx y agregue el siguiente fragmento de código;

    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. Guarde el archivo.

Agregar el componente PageLayout

El componente PageLayout se usará para mostrar el contenido principal de la aplicación y se puede personalizar para incluir cualquier contenido adicional que quiera mostrar en cada página de la aplicación. La información del perfil del usuario se mostrará pasando la información a través de propiedades.

  1. Abra src/components/PageLayout.jsx y agregue el siguiente fragmento de código;

    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. Guarde el archivo.

Adición del componente DataDisplay

El DataDisplay componente se usará para mostrar la información del perfil del usuario y una tabla de notificaciones, que se creará en la sección siguiente del tutorial. El IdTokenData componente se usará para mostrar las afirmaciones en el token de identificación.

  1. Abra src/components/DataDisplay.jsx y agregue el siguiente fragmento de código;

    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. Guarde el archivo.

Pasos siguientes