Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kait dalam MSAL React adalah fungsi yang memungkinkan Anda menggunakan fitur MSAL dan metode status dan siklus hidup React di dalam komponen fungsi. Kait utama adalah useAccount, , useIsAuthenticateduseMsal, dan useMsalAuthentication. Artikel ini akan memandu Anda melalui cara menggunakan masing-masing kait ini.
useAccount Hook
Hook useAccount menerima parameter accountIdentifier dan mengembalikan objek AccountInfo untuk akun tersebut jika akun tersebut sedang masuk, atau null jika tidak. Jika tidak ada pengidentifikasi akun yang diberikan, akun aktif saat ini akan dikembalikan.
Anda dapat membaca lebih lanjut tentang objek AccountInfo yang dikembalikan dalam dokumentasi @azure/msal-browser di API Login di MSAL.
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
Hook useIsAuthenticated mengembalikan boolean yang menunjukkan apakah akun masuk atau tidak. Ini secara opsional menerima objek yang accountIdentifier dapat Anda berikan jika Anda perlu mengetahui apakah akun tertentu masuk atau tidak.
Tentukan apakah ada akun yang saat ini masuk
Cuplikan berikut menggunakan hook useIsAuthenticated dari paket @azure/msal-react. Komponen kemudian secara kondisional merender pesan berdasarkan apakah pengguna masuk atau tidak.
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>
);
}
Menentukan apakah pengguna tertentu masuk
Cuplikan berikut menggunakan hook useIsAuthenticated dari paket @azure/msal-react untuk menentukan apakah pengguna tertentu sedang login.
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
Hook useMsal mengembalikan konteks. Ini dapat digunakan jika Anda memerlukan akses ke PublicClientApplication instans, daftar akun yang saat ini masuk atau jika Anda perlu mengetahui apakah login atau interaksi lain saat ini sedang berlangsung.
Catatan: Nilai accounts yang dikembalikan oleh useMsal hanya akan diperbarui saat akun ditambahkan atau dihapus, dan tidak akan diperbarui saat klaim diperbarui. Jika Anda perlu mengakses klaim yang diperbarui untuk pengguna saat ini, gunakan hook useAccount atau panggil acquireTokenSilent sebagai gantinya.
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
Hook useMsalAuthentication akan memulai login jika pengguna belum masuk, jika tidak, pengguna akan mencoba memperoleh token.
Parameter Masukan
Ada beberapa parameter input berbeda yang dapat Anda berikan ke useMsalAuthentication hook:
- interactionType - (None, Popup, Redirect, atau Silent) menentukan bagaimana Anda ingin memperoleh token atau login saat interaksi diperlukan (perhatikan opsi Senyap memiliki beberapa pertimbangan tambahan yang dijelaskan di bawah).
- objek permintaan - (opsional) menentukan parameter tambahan yang akan digunakan oleh panggilan masuk atau akuisisi token
- accountIdentifiers - objek ini digunakan untuk memberi tahu hook pengguna mana yang harus login atau diperolehkan tokennya
Mengembalikan Properti
-
result - Hasil dari login terakhir yang berhasil atau akuisisi token. Perhatikan bahwa hook ini hanya mencoba masuk atau memperoleh token secara otomatis satu kali. Ini adalah tanggung jawab aplikasi untuk memanggil
loginfungsi atauacquireToken, ketika diperlukan, untuk memperbarui nilai ini. -
error - Jika terjadi kesalahan selama login atau akuisisi token, properti ini akan berisi informasi tentang kesalahan tersebut. Anda dapat menggunakan fungsi
loginatauacquireTokenyang dikembalikan oleh hook ini untuk mencoba lagi. Propertierrorakan dihapus pada proses masuk atau akuisisi token yang berhasil berikutnya. -
login- fungsi yang dapat digunakan untuk mencoba kembali login yang gagal. Propertiresultdanerrorakan diperbarui. -
acquireToken- fungsi yang dapat digunakan untuk mendapatkan token akses baru sebelum memanggil API yang dilindungi. Propertiresultdanerrorakan diperbarui.
Meneruskan tipe interaksi "Silent" akan memanggil ssoSilent, yang mencoba membuka iframe tersembunyi dan menggunakan ulang sesi yang sudah ada dengan Microsoft Entra ID. Ini tidak akan berfungsi di browser yang memblokir cookie pihak ke-3 seperti Safari. Selain itu, objek permintaan diperlukan saat menggunakan jenis "Senyap". Jika Anda sudah memiliki informasi login pengguna, Anda dapat meneruskan salah satu parameter opsional loginHint atau sid untuk login ke akun tertentu. Catatan: ada pertimbangan tambahan - saat menggunakan ssoSilent tanpa memberikan informasi apa pun tentang sesi pengguna.
ssoSilent contoh
Jika Anda menggunakan mode senyap, Anda harus menangani kesalahan apa pun dan mencoba login secara interaktif sebagai cadangan.
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;
Contoh pengguna tertentu
Jika Anda ingin memastikan pengguna tertentu masuk, berikan accountIdentifiers objek.
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>
);
}
Baca juga
Anda dapat menemukan dokumentasi untuk API PublicClientApplication yang diekspos di Browser MSAL: