Sdílet prostřednictvím


Kurz: Přidání samoobslužného resetování hesla

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

Tento kurz ukazuje, jak uživatelům povolit změnu nebo resetování hesla bez zapojení správce nebo helpdesku.

V tomto kurzu se naučíte:

  • Přidejte proces samoobslužného resetování hesla (SSPR).
  • Přidejte do aplikace požadované uživatelské rozhraní (UI) pro SSPR.
  • Řešit chyby

Požadavky

Přidání procesu samoobslužného resetování hesla

Pokud chcete do aplikace pro Android přidat tok SSPR, potřebujete uživatelské rozhraní pro resetování hesla:

  • Vstupní textové pole pro shromáždění e-mailové adresy uživatele (uživatelské jméno).
  • Vstupní textové pole pro shromažďování jednorázového hesla.
  • Vstupní textové pole pro shromáždění nového hesla.

Když uživatelé zapomenou svoje hesla, potřebují formulář pro zadání uživatelských jmen (e-mailových adres), aby mohli spustit tok resetování hesla. Uživatel vybere tlačítko Zapomenout heslo nebo odkaz.

Spuštění toku resetování hesla

Pokud chcete požadavek zpracovat, když uživatel vybere tlačítko zapomenuté heslo nebo odkaz, použijte metodu resetPassword(parameters) sady Android SDK, jak je znázorněno v následujícím fragmentu kódu:

 private fun forgetPassword() { 
     CoroutineScope(Dispatchers.Main).launch { 
         val parameter = NativeAuthResetPasswordParameters(username = email)
         val actionResult = authClient.resetPassword(parameter)

         when (resetPasswordResult) { 
             is ResetPasswordStartResult.CodeRequired -> { 
                 // The implementation of submitCode() please see below. 
                 submitCode(resetPasswordResult.nextState) 
             } 
             is ResetPasswordError -> {
                 // Handle errors
                 handleResetPasswordError(resetPasswordResult)
             }
         }
     } 
 } 
  • resetPassword(parameters) metoda inicializuje tok resetování hesla a jednorázové heslo e-mailu se odešle na e-mailovou adresu uživatele k ověření.

  • Výsledek návratu resetPassword(parameters) je buď ResetPasswordStartResult.CodeRequired, nebo ResetPasswordError.

  • Pokud resetPasswordResult is ResetPasswordStartResult.CodeRequired, aplikace potřebuje shromáždit jednorázový přístupový kód e-mailu od uživatele a odeslat ho, jak je znázorněno v Odeslat jednorázový přístupový kód.

  • Pokud resetPasswordResult is ResetPasswordError, sada Android SDK poskytuje pomocné metody, které vám umožní podrobněji analyzovat konkrétní chyby: – isUserNotFound() - isBrowserRequired()

  • Tyto chyby značí, že předchozí operace nebyla úspěšná, takže odkaz na nový stav není k dispozici. Řešte tyto chyby, jak je uvedeno v části Zpracování chyb.

Odeslání jednorázového hesla e-mailu

Vaše aplikace shromažďuje jednorázové heslo e-mailu od uživatele. K odeslání jednorázového hesla e-mailu použijte následující fragment kódu:

private suspend fun submitCode(currentState: ResetPasswordCodeRequiredState) { 
    val code = binding.codeText.text.toString() 
    val submitCodeResult = currentState.submitCode(code) 

    when (submitCodeResult) { 
        is ResetPasswordSubmitCodeResult.PasswordRequired -> { 
            // Handle success
            resetPassword(submitCodeResult.nextState) 
        } 
         is SubmitCodeError -> {
             // Handle errors
             handleSubmitCodeError(actionResult)
         }
    } 
} 
  • Výsledek vrácení akce submitCode() je buď ResetPasswordSubmitCodeResult.PasswordRequired, nebo SubmitCodeError.

  • Pokud submitCodeResult is ResetPasswordSubmitCodeResult.PasswordRequired aplikace potřebuje od uživatele shromáždit nové heslo a odeslat ho, jak je znázorněno v Odeslat nové heslo.

  • Pokud uživatel e-mailem nedostane jednorázový kód, aplikace může tento kód znovu odeslat. K opětovnému odeslání nového e-mailového jednorázového hesla použijte následující fragment kódu:

    private fun resendCode() { 
         clearCode() 
    
         val currentState = ResetPasswordCodeRequiredState 
    
         CoroutineScope(Dispatchers.Main).launch { 
             val resendCodeResult = currentState.resendCode() 
    
             when (resendCodeResult) { 
                 is ResetPasswordResendCodeResult.Success -> { 
                     // Handle code resent success
                 } 
                 is ResendCodeError -> {
                      // Handle ResendCodeError errors
                  }
             } 
         } 
    } 
    
    • Výsledek vrácení akce resendCode() je buď ResetPasswordResendCodeResult.Success, nebo ResendCodeError.

    • ResendCodeError je neočekávaná chyba sady SDK. Tato chyba značí, že předchozí operace nebyla úspěšná, takže odkaz na nový stav není k dispozici.

  • Pokud submitCodeResult is SubmitCodeError, sada Android SDK poskytuje pomocné metody, které vám umožní dále analyzovat konkrétní chyby:

    • isInvalidCode()
    • isBrowserRequired()

    Tyto chyby značí, že předchozí operace nebyla úspěšná, takže odkaz na nový stav není k dispozici. Řešte tyto chyby, jak je uvedeno v části Zpracování chyb.

Odeslání nového hesla

Po ověření e-mailu uživatele musíte od uživatele shromáždit nové heslo a odeslat ho. Heslo, které aplikace shromažďuje od uživatele, musí splňovat zásady hesel Microsoft Entra. Použijte následující fragment kódu:

private suspend fun resetPassword(currentState: ResetPasswordPasswordRequiredState) { 
    val password = binding.passwordText.text.toString() 

    val submitPasswordResult = currentState.submitPassword(password) 

    when (submitPasswordResult) { 
        is ResetPasswordResult.Complete -> { 
            // Handle reset password complete. 
        } 
        is ResetPasswordSubmitPasswordError -> {
            // Handle errors
            handleSubmitPasswordError(actionResult)
        }
    } 
} 
  • Výsledek vrácení akce submitPassword() je buď ResetPasswordResult.Complete, nebo ResetPasswordSubmitPasswordError.

  • ResetPasswordResult.Complete označuje úspěšný tok resetování hesla.

  • Pokud submitPasswordResult is ResetPasswordSubmitPasswordError, sada SDK poskytuje pomocné metody pro další analýzu konkrétního typu vrácených chyb: – isInvalidPassword() - isPasswordResetFailed()

    Tyto chyby značí, že předchozí operace nebyla úspěšná, takže odkaz na nový stav není k dispozici. Řešte tyto chyby, jak je uvedeno v části Zpracování chyb.

Automatické přihlášení po resetování hesla

Po úspěšném procesu resetování hesla můžete automaticky přihlásit uživatele bez zahájení nového procesu přihlášení.

ResetPasswordResult.Complete vrátí objekt SignInContinuationState. SignInContinuationState poskytuje přístup k metodě signIn(parameters).

Pokud chcete automaticky přihlásit uživatele po resetování hesla, použijte následující fragment kódu:

 private suspend fun resetPassword(currentState: ResetPasswordPasswordRequiredState) { 
     val submitPasswordResult = currentState.submitPassword(password) 
 
     when (submitPasswordResult) { 
         is ResetPasswordResult.Complete -> { 
             signInAfterPasswordReset(nextState = actionResult.nextState)
         } 
     } 
 } 
 
 private suspend fun signInAfterPasswordReset(nextState: SignInContinuationState) {
     val signInContinuationState = nextState

     val parameters = NativeAuthSignInContinuationParameters()
     val signInActionResult = signInContinuationState.signIn(parameters)

     when (actionResult) {
         is SignInResult.Complete -> {
             fetchTokens(accountState = actionResult.resultValue)
         }
         else {
             // Handle unexpected error
         }
     }
  }
 
 private suspend fun fetchTokens(accountState: AccountState) {
     val getAccessTokenParameters = NativeAuthGetAccessTokenParameters()
     val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters)

     if (accessTokenResult is GetAccessTokenResult.Complete) {
         val accessToken =  accessTokenResult.resultValue.accessToken
         val idToken = accountState.getIdToken()
     }
 }

Pokud chcete po přihlášení načíst nároky ID tokenu, použijte postup v Přečtěte si nároky ID tokenu.

Řešení chyb resetování hesla

Může dojít k několika očekávaným chybám. Uživatel se například může pokusit resetovat heslo pomocí neexistující e-mailu nebo zadat heslo, které nesplňuje požadavky na heslo.

Pokud dojde k chybám, poskytněte uživatelům nápovědu k chybám.

K těmto chybám může dojít při spuštění toku resetování hesla nebo při odeslání jednorázového hesla e-mailu nebo při odeslání hesla.

Zpracování chyby při zahájení resetování hesla

Pokud chcete zpracovat chybu způsobenou spuštěním resetování hesla, použijte následující fragment kódu:

private fun handleResetPasswordError(error: ResetPasswordError) {
    when {
        error.isUserNotFound() -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Řešení chyby při odesílání e-mailu s jednorázovým heslem.

Pokud chcete zpracovat chybu způsobenou jednorázovým heslem e-mailu, použijte následující fragment kódu:

private fun handleSubmitCodeError(error: SubmitCodeError) {
    when {
        error.isInvalidCode() -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Zpracování chyby odeslání hesla

Pokud chcete zpracovat chybu způsobenou odesláním hesla, použijte následující fragment kódu:

private fun handleSubmitPasswordError(error: ResetPasswordSubmitPasswordError) {
    when {
        error.isInvalidPassword() || error.isPasswordResetFailed()
        -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Další kroky

Kurz : Podpora webového záložního řešení v aplikaci pro Android