Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
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
- Dokončete kroky v části Přihlášení uživatelů v ukázkové nativní mobilní aplikaci pro Android. V tomto článku se dozvíte, jak spustit ukázkový Android, který nakonfigurujete pomocí nastavení tenanta.
- Povolit samoobslužné resetování hesla. Tento článek pomáhá povolit metodu ověřování jednorázovým heslem přes e-mail pro všechny uživatele ve vašem tenantu, což je požadavek na samoobslužné resetování hesla.
- Návod: Příprava aplikace pro Android na nativní ověřování.
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, neboResetPasswordError.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, neboSubmitCodeError.Pokud
submitCodeResult is ResetPasswordSubmitCodeResult.PasswordRequiredaplikace 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, neboResendCodeError.ResendCodeErrorje 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, neboResetPasswordSubmitPasswordError.ResetPasswordResult.Completeoznač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