Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:
Externe Mandanten (weitere Informationen)
In diesem Lernprogramm erfahren Sie, wie Sie die Kennwortzurücksetzung in einer React-Einzelseiten-App mit systemeigenem JavaScript SDK aktivieren.
In diesem Tutorial erfahren Sie:
- Aktualisieren Sie die React-App, um das Kennwort des Benutzers zurückzusetzen.
- Testflow für die Kennwortzurücksetzung
Voraussetzungen
- Führen Sie die Schritte im Lernprogramm aus: Registrieren von Benutzern bei einer einzelseitigen React-App mit systemeigenem JavaScript SDK.
- Aktivieren Sie die Self-Service-Kennwortzurücksetzung (Self-Service Password Reset, SSPR) für Kundenbenutzer im externen Mandanten. SSPR ist für Kundenbenutzer für Apps verfügbar, die E-Mails mit Kennwortauthentifizierungsfluss verwenden.
Erstellen von UI-Komponenten
Während des Ablaufs der Kennwortzurücksetzung sammelt diese App den Benutzernamen (E-Mail), eine Einmalkennung und ein neues Benutzerkennwort auf verschiedenen Bildschirmen. In diesem Abschnitt erstellen Sie die Formulare, die die Informationen sammeln, die die App zum Zurücksetzen des Kennworts benötigt.
Erstellen Sie einen Ordner namens "src/app/reset-password".
Erstellen Sie die Datei reset-password/components/InitialForm.tsx , und fügen Sie dann den Code aus reset-password/components/InitialForm.tsx ein. Diese Komponente zeigt ein Formular an, das den Benutzernamen (E-Mail) eines Benutzers sammelt.
Erstellen Sie die Datei "reset-password/components/CodeForm.tsx ", und fügen Sie dann den Code aus "reset-password/components/CodeForm.tsx" ein. Diese Komponente zeigt ein Formular an, das die einmalige Kennung erfasst, die der Benutzer in ihrem E-Mail-Posteingang erhält.
Erstellen Sie reset-password/components/NewPasswordForm.tsx file, und fügen Sie dann den Code aus reset-password/components/NewPasswordForm.tsx ein. Diese Komponente zeigt ein Formular an, das das neue Kennwort eines Benutzers sammelt.
Behandeln von Formularinteraktionen
Erstellen Sie die Datei "reset-password/page.tsx ", um die Logik für einen Anmeldeablauf zu verarbeiten. In dieser Datei:
Importieren Sie die erforderlichen Komponenten, und zeigen Sie das richtige Formular basierend auf dem Zustand an. Ein vollständiges Beispiel finden Sie in "reset-password/page.tsx":
import { CustomAuthPublicClientApplication, ICustomAuthPublicClientApplication, ResetPasswordCodeRequiredState, ResetPasswordPasswordRequiredState, ResetPasswordCompletedState, AuthFlowStateBase, } from "@azure/msal-browser/custom-auth"; export default function ResetPassword() { const [app, setApp] = useState<ICustomAuthPublicClientApplication | null>( null ); const [loadingAccountStatus, setLoadingAccountStatus] = useState(true); const [isSignedIn, setSignInState] = useState(false); const [email, setEmail] = useState(""); const [code, setCode] = useState(""); const [newPassword, setNewPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const [resetState, setResetState] = useState<AuthFlowStateBase | null>( null ); useEffect(() => { const initializeApp = async () => { const appInstance = await CustomAuthPublicClientApplication.create( customAuthConfig ); setApp(appInstance); }; initializeApp(); }, []); useEffect(() => { const checkAccount = async () => { if (!app) return; const accountResult = app.getCurrentAccount(); if (accountResult.isCompleted()) { setSignInState(true); } setLoadingAccountStatus(false); }; checkAccount(); }, [app]); const renderForm = () => { if (loadingAccountStatus) { return; } if (isSignedIn) { return ( <div style={styles.signed_in_msg}> Please sign out before processing the password reset. </div> ); } if (resetState instanceof ResetPasswordPasswordRequiredState) { return ( <NewPasswordForm onSubmit={handleNewPasswordSubmit} newPassword={newPassword} setNewPassword={setNewPassword} loading={loading} /> ); } if (resetState instanceof ResetPasswordCodeRequiredState) { return ( <CodeForm onSubmit={handleCodeSubmit} code={code} setCode={setCode} loading={loading} /> ); } if (resetState instanceof ResetPasswordCompletedState) { return <ResetPasswordResultPage />; } return ( <InitialForm onSubmit={handleInitialSubmit} email={email} setEmail={setEmail} loading={loading} /> ); }; return ( <div style={styles.container}> <h2 style={styles.h2}>Reset Password</h2> {renderForm()} {error && <div style={styles.error}>{error}</div>} </div> ); }Verwenden Sie den folgenden Codeausschnitt, um den Ablauf der Kennwortzurücksetzung zu starten. Ein vollständiges Beispiel finden Sie unter reset-password/page.tsx , um zu erfahren, wo der Codeausschnitt platziert werden soll:
const handleInitialSubmit = async (e: React.FormEvent) => { if (!app) return; e.preventDefault(); setError(""); setLoading(true); const result = await app.resetPassword({ username: email, }); const state = result.state; if (result.isFailed()) { if (result.error?.isInvalidUsername()) { setError("Invalid email address"); } else if (result.error?.isUserNotFound()) { setError("User not found"); } else { setError( result.error?.errorData.errorDescription || "An error occurred while initiating password reset" ); } } else { setResetState(state); } setLoading(false); };Die Instanzmethode
resetPassword()des SDK startet den Ablauf der Kennwortzurücksetzung.Verwenden Sie den folgenden Codeausschnitt, um die einmalkennung zu übermitteln. Ein vollständiges Beispiel finden Sie unter reset-password/page.tsx , um zu erfahren, wo der Codeausschnitt platziert werden soll:
const handleCodeSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setLoading(true); if (resetState instanceof ResetPasswordCodeRequiredState) { const result = await resetState.submitCode(code); const state = result.state; if (result.isFailed()) { if (result.error?.isInvalidCode()) { setError("Invalid verification code"); } else { setError(result.error?.errorData.errorDescription || "An error occurred while verifying the code"); } } else { setResetState(state); } } setLoading(false); };Der Kennwortzurücksetzungsstatus
submitCode()sendet die einmalkennung.Verwenden Sie den folgenden Codeausschnitt, um das neue Kennwort des Benutzers zu übermitteln. Ein vollständiges Beispiel finden Sie unter reset-password/page.tsx , um zu erfahren, wo der Codeausschnitt platziert werden soll:
const handleNewPasswordSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); setLoading(true); if (resetState instanceof ResetPasswordPasswordRequiredState) { const result = await resetState.submitNewPassword(newPassword); const state = result.state; if (result.isFailed()) { if (result.error?.isInvalidPassword()) { setError("Invalid password"); } else { setError(result.error?.errorData.errorDescription || "An error occurred while setting new password"); } } else { setResetState(state); } } setLoading(false); };Der Status der Kennwortzurücksetzung
submitNewPassword()übermittelt das neue Kennwort des Benutzers.Verwenden Sie den folgenden Codeausschnitt, um das Kennwortzurücksetzungsergebnis zu verwenden. Ein vollständiges Beispiel finden Sie unter reset-password/page.tsx , um zu erfahren, wo der Codeausschnitt platziert werden soll:
if (resetState instanceof ResetPasswordCompletedState) { return <ResetPasswordResultPage/>; }
Optional: Automatisches Anmelden von Benutzern nach der Kennwortzurücksetzung
Nachdem ein Benutzer sein Kennwort erfolgreich zurückgesetzt hat, können Sie sie direkt bei der App anmelden, ohne einen neuen Anmeldefluss zu initiieren. Verwenden Sie dazu den folgenden Codeschnipsel. Ein vollständiges Beispiel finden Sie unter reset-password/page.tsx:
if (resetState instanceof ResetPasswordCompletedState) {
const result = await resetState.signIn();
const state = result.state;
if (result.isFailed()) {
setError(result.error?.errorData?.errorDescription || "An error occurred during auto sign-in");
}
if (result.isCompleted()) {
setData(result.data);
setResetState(state);
}
}
Ausführen und Testen der App
Führen Sie die Schritte in "Ausführen" aus, und testen Sie Ihre App , um Ihre App auszuführen, und testen Sie dann den Anmeldeablauf.