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.
Berlaku untuk: Penyewa Tenaga Kerja
Penyewa Eksternal (pelajari lebih lanjut)
Tutorial ini menunjukkan cara memberi pengguna kemampuan untuk mengubah atau mengatur ulang kata sandi mereka, tanpa keterlibatan administrator atau staf dukungan.
Di tutorial ini, Anda akan:
- Tambahkan pengaturan ulang kata sandi mandiri.
- Tangani kesalahan.
Prasyarat
Atur ulang kata sandi
Untuk mengatur ulang kata sandi pengguna yang ada, kita perlu memvalidasi alamat email menggunakan kode sandi satu kali (OTP).
Untuk memvalidasi email, kami memanggil metode
resetPassword(parameters:delegate)
dari instans SDK menggunakan cuplikan kode berikut:let parameters = MSALNativeAuthResetPasswordParameters(username: email) nativeAuth.resetPassword(parameters: parameters, delegate: self)
Untuk menerapkan protokol
ResetPasswordStartDelegate
sebagai ekstensi ke kelas kami, gunakan cuplikan kode berikut:extension ViewController: ResetPasswordStartDelegate { func onResetPasswordCodeRequired( newState: MSAL.ResetPasswordCodeRequiredState, sentTo: String, channelTargetType: MSALNativeAuthChannelType, codeLength: Int ) { resultTextView.text = "Verification code sent to \(sentTo)" } func onResetPasswordStartError(error: MSAL.ResetPasswordStartError) { resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")" } }
Panggilan ke
resetPassword(parameters:delegate)
menghasilkan panggilan ke metode delegasionResetPasswordCodeRequired()
atauonResetPasswordStartError()
.Dalam skenario yang paling umum
onResetPasswordCodeRequired(newState:sentTo:channelTargetType:codeLength)
akan dipanggil untuk menunjukkan bahwa kode telah dikirim untuk memverifikasi alamat email pengguna. Bersama dengan beberapa rincian tentang di mana kode telah dikirim, dan berapa banyak digit yang terkandung di dalamnya, metode delegasi ini juga memiliki parameternewState
jenisResetPasswordCodeRequiredState
, yang memberikan akses kepada kami ke dua metode baru.submitCode(code:delegate)
resendCode(delegate)
Untuk mengirimkan kode yang disediakan pengguna kepada kami, gunakan:
newState.submitCode(code: userSuppliedCode, delegate: self)
Untuk memverifikasi kode yang dikirimkan, mulailah dengan menerapkan protokol
ResetPasswordVerifyCodeDelegate
sebagai ekstensi ke kelas Anda menggunakan cuplikan kode berikut:extension ViewController: ResetPasswordVerifyCodeDelegate { func onResetPasswordVerifyCodeError( error: MSAL.VerifyCodeError, newState: MSAL.ResetPasswordCodeRequiredState? ) { resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")" } func onPasswordRequired(newState: MSAL.ResetPasswordRequiredState) { // use newState instance to submit the new password } }
Dalam skenario yang paling umum, kami menerima panggilan ke
onPasswordRequired(newState)
menunjukkan bahwa kami dapat memberikan kata sandi baru menggunakan instansnewState
.newState.submitPassword(password: newPassword, delegate: self)
Untuk menerapkan protokol
ResetPasswordRequiredDelegate
sebagai ekstensi ke kelas kami, gunakan cuplikan kode berikut:extension ViewController: ResetPasswordRequiredDelegate { func onResetPasswordRequiredError( error: MSAL.PasswordRequiredError, newState: MSAL.ResetPasswordRequiredState? ) { resultTextView.text = "Error submitting new password: \(error.errorDescription ?? "no description")" } func onResetPasswordCompleted(newState: SignInAfterResetPasswordState) { resultTextView.text = "Password reset completed" } }
Dalam skenario yang paling umum, kami menerima panggilan ke
onResetPasswordCompleted(newState)
menunjukkan bahwa alur reset kata sandi telah selesai.
Menangani kesalahan
Dalam penerapan protokol ResetPasswordStartDelegate
sebelumnya, kami menampilkan kesalahan ketika kami menangani fungsi delegasi onResetPasswordStartError(error)
.
Kami dapat meningkatkan pengalaman pengguna dengan menangani jenis kesalahan tertentu sebagai berikut:
func onResetPasswordStartError(error: MSAL.ResetPasswordStartError) {
if error.isInvalidUsername {
resultTextView.text = "Invalid username"
} else if error.isUserNotFound {
resultTextView.text = "User not found"
} else if error.isUserDoesNotHavePassword {
resultTextView.text = "User is not registered with a password"
} else {
resultTextView.text = "Error during reset password flow in: \(error.errorDescription ?? "no description")"
}
}
Menangani kesalahan dengan status
Beberapa kesalahan termasuk referensi ke negara baru. Misalnya, jika pengguna memasukkan kode verifikasi email yang salah, penanganan kesalahan menyertakan referensi ke ResetPasswordCodeRequiredState
yang dapat digunakan untuk mengirimkan kode verifikasi baru.
Dalam implementasi protokol ResetPasswordVerifyCodeDelegate
sebelumnya, kami hanya menampilkan kesalahan ketika kami menangani fungsi delegasi onResetPasswordError(error:newState)
.
Kami dapat meningkatkan pengalaman pengguna dengan meminta pengguna untuk memasukkan kode yang benar dan mengirimkannya kembali sebagai berikut:
func onResetPasswordVerifyCodeError(
error: MSAL.VerifyCodeError,
newState: MSAL.ResetPasswordCodeRequiredState?
) {
if error.isInvalidCode {
// Inform the user that the submitted code was incorrect and ask for a new code to be supplied.
// Request a new code calling `newState.resendCode(delegate)`
let userSuppliedCode = retrieveNewCode(newState)
newState?.submitCode(code: userSuppliedCode, delegate: self)
} else {
resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")"
}
}
Contoh lain di mana handler kesalahan menyertakan referensi ke status baru adalah ketika pengguna memasukkan kata sandi yang tidak valid. Dalam hal ini, penanganan kesalahan menyertakan referensi ke ResetPasswordRequiredState
yang dapat digunakan untuk mengirimkan kata sandi baru. Berikut adalah contohnya:
func onResetPasswordRequiredError(
error: MSAL.PasswordRequiredError,
newState: MSAL.ResetPasswordRequiredState?
) {
if error.isInvalidPassword {
// Inform the user that the submitted password was invalid and ask for a new password to be supplied.
let newPassword = retrieveNewPassword()
newState?.submitPassword(password: newPassword, delegate: self)
} else {
resultTextView.text = "Error submitting password: \(error.errorDescription ?? "no description")"
}
}
Masuk setelah reset kata sandi
SDK memberi pengembang kemampuan untuk masuk ke pengguna setelah mengatur ulang kata sandi mereka tanpa harus menyediakan nama pengguna, atau untuk memverifikasi alamat email melalui kode sandi satu kali.
Untuk mendaftarkan pengguna setelah reset kata sandi berhasil, gunakan metode signIn(parameters:delegate)
dari status baru SignInAfterResetPasswordState
yang dikembalikan dalam fungsi onResetPasswordCompleted(newState)
:
extension ViewController: ResetPasswordRequiredDelegate {
func onResetPasswordRequiredError(
error: MSAL.PasswordRequiredError,
newState: MSAL.ResetPasswordRequiredState?
) {
resultTextView.text = "Error submitting new password: \(error.errorDescription ?? "no description")"
}
func onResetPasswordCompleted() {
resultTextView.text = "Password reset completed"
let parameters = MSALNativeAuthSignInAfterResetPasswordParameters()
newState.signIn(parameters: parameters, delegate: self)
}
}
signIn(parameters:delegate)
menerima parameter delegasi dan kita harus menerapkan metode yang diperlukan dalam protokol SignInAfterResetPasswordDelegate
.
Dalam skenario yang paling umum, kami menerima panggilan ke onSignInCompleted(result)
menunjukkan bahwa pengguna telah masuk. Hasilnya dapat digunakan untuk mengakses access token
.
extension ViewController: SignInAfterSignUpDelegate {
func onSignInAfterSignUpError(error: SignInAfterSignUpError) {
resultTextView.text = "Error signing in after password reset"
}
func onSignInCompleted(result: MSAL.MSALNativeAuthUserAccountResult) {
// User successfully signed in
let parameters = MSALNativeAuthGetAccessTokenParameters()
result.getAccessToken(parameters: parameters, delegate: self)
}
}
getAccessToken(parameters:delegate)
menerima parameter delegasi dan kita harus menerapkan metode yang diperlukan dalam protokol CredentialsDelegate
.
Dalam skenario yang paling umum, kami menerima panggilan ke onAccessTokenRetrieveCompleted(result)
yang menunjukkan bahwa pengguna memperoleh access token
.
extension ViewController: CredentialsDelegate {
func onAccessTokenRetrieveError(error: MSAL.RetrieveAccessTokenError) {
resultTextView.text = "Error retrieving access token"
}
func onAccessTokenRetrieveCompleted(result: MSALNativeAuthTokenResult) {
resultTextView.text = "Signed in. Access Token: \(result.accessToken)"
}
}
Langkah berikutnya
Tutorial Mendukung fallback web