Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az MSAL React horgai olyan függvények, amelyek lehetővé teszik az MSAL-funkciók és a React állapot- és életciklus-metódusok használatát a funkcionális összetevőkben. A fő hookok a useAccount, useIsAuthenticated, useMsal és useMsalAuthentication. Ez a cikk bemutatja, hogyan használhatja ezeket a horgokat.
useAccount hook
A useAccount horog elfogad egy paramétert accountIdentifier , és visszaadja a AccountInfo fiók objektumát, ha be van jelentkezve, vagy null ha nem. Ha nincs megadva fiókazonosító, a rendszer az aktuális aktív fiókot adja vissza.
A Bejelentkezési API-k az MSAL-ben című részben többet is olvashat a @azure/msal-browser dokumentációban visszaadott AccountInfo objektumról.
const accountIdentifier = {
localAccountId: "example-local-account-identifier",
homeAccountId: "example-home-account-identifier"
username: "example-username" // We do not recommend relying only on username
}
const accountInfo = useAccount(accountIdentifier);
useIsAuthenticated hook
A useIsAuthenticated horog egy logikai értéket ad vissza, amely jelzi, hogy be van-e jelentkezve egy fiók. Opcionálisan elfogad egy accountIdentifier olyan objektumot, amelyet megadhat, ha tudnia kell, hogy egy adott fiók be van-e jelentkezve.
Annak megállapítása, hogy van-e jelenleg bejelentkezve valamelyik fiók
Az alábbi kódrészlet a useIsAuthenticated csomagból származó @azure/msal-react horogot használja. Az összetevő ezután feltételesen megjelenít egy üzenetet attól függően, hogy egy felhasználó bejelentkezett-e vagy sem.
import React from 'react';
import { useIsAuthenticated } from "@azure/msal-react";
export function App() {
const isAuthenticated = useIsAuthenticated();
return (
<React.Fragment>
<p>Anyone can see this paragraph.</p>
{isAuthenticated && (
<p>At least one account is signed in!</p>
)}
{!isAuthenticated && (
<p>No users are signed in!</p>
)}
</React.Fragment>
);
}
Annak megállapítása, hogy egy adott felhasználó bejelentkezett-e
Az alábbi kódrészlet a useIsAuthenticated csomagból származó @azure/msal-react horoggal állapítja meg, hogy egy adott felhasználó bejelentkezett-e.
import React from 'react';
import { useIsAuthenticated } from "@azure/msal-react";
export function App() {
const accountIdentifiers = {
localAccountId: "example-local-account-identifier",
homeAccountId: "example-home-account-identifier",
username: "example-username"
}
const isAuthenticated = useIsAuthenticated(accountIdentifiers);
return (
<React.Fragment>
<p>Anyone can see this paragraph.</p>
{isAuthenticated && (
<p>User with specified localAccountId is signed in!</p>
)}
{!isAuthenticated && (
<p>User with specified localAccountId is not signed in!</p>
)}
</React.Fragment>
);
}
useMsal hook
A useMsal hook visszaadja a kontextust. Ez akkor használható, ha hozzá kell férnie a PublicClientApplication példányhoz, a jelenleg bejelentkezett fiókok listájához, vagy ha tudnia kell, hogy egy bejelentkezés vagy más interakció jelenleg folyamatban van-e.
Megjegyzés: A accounts visszaadott useMsal érték csak a fiókok hozzáadásakor vagy eltávolításakor frissül, és nem frissül a jogcímek frissítésekor. Ha a jelenlegi felhasználó frissített jogcímadataihoz kell hozzáférnie, használja a useAccount hookot, vagy inkább hívja meg a acquireTokenSilent-t.
import { useState, useEffect } from "react";
import { useMsal } from "@azure/msal-react";
import { InteractionStatus } from "@azure/msal-browser";
const { instance, accounts, inProgress } = useMsal();
const [loading, setLoading] = useState(false);
const [apiData, setApiData] = useState(null);
useEffect(() => {
if (!loading && inProgress === InteractionStatus.None && accounts.length > 0) {
if (apiData) {
// Skip data refresh if already set - adjust logic for your specific use case
return;
}
const tokenRequest = {
account: accounts[0], // This is an example - Select account based on your app's requirements
scopes: ["User.Read"]
}
// Acquire an access token
instance.acquireTokenSilent(tokenRequest).then((response) => {
// Call your API with the access token and return the data you need to save in state
callApi(response.accessToken).then((data) => {
setApiData(data);
setLoading(false);
});
}).catch(async (e) => {
// Catch interaction_required errors and call interactive method to resolve
if (e instanceof InteractionRequiredAuthError) {
await instance.acquireTokenRedirect(tokenRequest);
}
throw e;
});
}
}, [inProgress, accounts, instance, loading, apiData]);
if (loading || inProgress === InteractionStatus.Login) {
// Render loading component
} else if (apiData) {
// Render content that depends on data from your API
}
useMsalAuthentication hook
A useMsalAuthentication hook bejelentkezést kezdeményez, ha a felhasználó még nincs bejelentkezve, ellenkező esetben pedig megpróbál tokent szerezni.
Bemeneti paraméterek
A horognak számos különböző bemeneti paramétert adhat meg useMsalAuthentication :
- interactionType – (Nincs, Előugró, Átirányítás vagy Csendes) megadja, hogyan szeretne jogkivonatokat vagy bejelentkezést beszerezni, ha interakcióra van szükség (vegye figyelembe, hogy a Csendes beállítás néhány további szempontot is ismertet alább).
- request object – (nem kötelező) a bejelentkezési vagy jogkivonat-beszerzési hívás által használandó további paramétereket adja meg
- accountIdentifiers – az objektum arra szolgál, hogy megadja a hooknak, melyik felhasználót jelentse be, vagy melyikhez szerezzen tokeneket
Tulajdonságok visszaküldése
-
eredmény – Az utolsó sikeres bejelentkezés vagy jogkivonat-beszerzés eredménye. Vegye figyelembe, hogy ez a hook csak egyszer próbál meg automatikusan bejelentkezni vagy tokeneket szerezni. Az alkalmazás felelőssége, hogy szükség esetén meghívja a
loginvagyacquireTokenfüggvényt ennek az értéknek a frissítéséhez. -
hiba – Ha a bejelentkezés vagy a jogkivonat beszerzése során hiba történik, ez a tulajdonság a hibával kapcsolatos információkat fogja tartalmazni. Az újrapróbálkozáshoz használhatja az e hook által visszaadott
loginvagyacquireTokenfüggvényt. Aerrortulajdonság a következő sikeres bejelentkezéskor vagy jogkivonat-beszerzéskor törlődik. -
login- függvény, amely a sikertelen bejelentkezés újrapróbálkozásához használható. A(z)resultéserrortulajdonságok frissülnek. -
acquireToken- függvény, amely egy új hozzáférési jogkivonat lekérésére használható védett API meghívása előtt. A(z)resultéserrortulajdonságai frissülnek.
A „Silent” interakciótípus átadása meghívja a(z) ssoSilent elemet, amely megpróbál megnyitni egy rejtett iframe-et, és újra felhasználni egy meglévő Microsoft Entra ID-munkamenetet. Ez nem működik olyan böngészőkben, amelyek letiltják a harmadik féltől származó cookie-kat, például a Safarit. Emellett a "Csendes" típus használatakor a kérelemobjektumra is szükség van. Ha már rendelkezik a felhasználó bejelentkezési adataival, egy adott fiókba való bejelentkezéshez átadhatja a loginHint vagy a sid opcionális paraméterek valamelyikét. Megjegyzés: további szempontokat is figyelembe kell venni – ha ssoSilent a felhasználó munkamenetéről nem ad meg semmilyen információt.
ssoSilent példa
Ha csendes módot használ, le kell kezelnie minden hibát, és tartalék megoldásként meg kell kísérelnie az interaktív bejelentkezést.
import React, { useEffect } from 'react';
import { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal, useMsalAuthentication } from "@azure/msal-react";
import { InteractionType, InteractionRequiredAuthError } from '@azure/msal-browser';
function App() {
const request = {
loginHint: "name@example.com",
scopes: ["User.Read"]
}
const { login, result, error } = useMsalAuthentication(InteractionType.Silent, request);
useEffect(() => {
if (error instanceof InteractionRequiredAuthError) {
login(InteractionType.Popup, request);
}
}, [error]);
const { accounts } = useMsal();
return (
<React.Fragment>
<p>Anyone can see this paragraph.</p>
<AuthenticatedTemplate>
<p>Signed in as: {accounts[0]?.username}</p>
</AuthenticatedTemplate>
<UnauthenticatedTemplate>
<p>No users are signed in!</p>
</UnauthenticatedTemplate>
</React.Fragment>
);
}
export default App;
Adott felhasználói példa
Ha meg szeretné győződni arról, hogy egy adott felhasználó bejelentkezett, adjon meg egy accountIdentifiers objektumot.
import React from 'react';
import { useMsalAuthentication } from "@azure/msal-react";
import { InteractionType } from '@azure/msal-browser';
export function App() {
const accountIdentifiers = {
username: "example-username"
}
const request = {
loginHint: "example-username",
scopes: ["User.Read"]
}
const { login, result, error } = useMsalAuthentication(InteractionType.Popup, request, accountIdentifiers);
return (
<React.Fragment>
<p>Anyone can see this paragraph.</p>
<AuthenticatedTemplate username="example-username">
<p>Example user is signed in!</p>
</AuthenticatedTemplate>
<UnauthenticatedTemplate username="example-username">
<p>Example user is not signed in!</p>
</UnauthenticatedTemplate>
</React.Fragment>
);
}
Lásd még
Az PublicClientApplication által elérhetővé tett API-k dokumentációját az MSAL Browserben találja: