Tutorial: Menambahkan pendaftaran di aplikasi iOS/macOS menggunakan autentikasi asli
Berlaku untuk: iOS (Swift) macOS (Swift)
Tutorial ini menunjukkan cara mendaftarkan pengguna menggunakan kode sandi satu kali email atau nama pengguna (email) dan kata sandi, dan mengumpulkan atribut pengguna di aplikasi iOS/macOS Anda menggunakan autentikasi asli.
- Daftarkan pengguna dengan menggunakan kode akses satu kali email atau nama pengguna (email) dan kata sandi.
- Kumpulkan atribut pengguna selama pendaftaran.
- Menangani kesalahan pendaftaran.
Prasyarat
- Tutorial: Siapkan aplikasi iOS/macOS Anda untuk autentikasi asli.
- Jika Anda ingin mengumpulkan atribut pengguna selama pendaftaran, konfigurasikan atribut pengguna saat Anda membuat alur pengguna pendaftaran dan masuk.
Mendaftarkan pengguna
Untuk mendaftarkan pengguna menggunakan kode akses satu kali email atau nama pengguna (email) dan kata sandi, Anda mengumpulkan email dari pengguna, lalu mengirim email yang berisi kode sandi satu kali email kepada pengguna. Pengguna memasukkan kode akses satu kali email yang valid untuk memvalidasi nama pengguna mereka.
Untuk mendaftarkan pengguna, Anda perlu:
Buat antarmuka pengguna (UI) untuk:
- Kumpulkan email dari pengguna. Tambahkan validasi ke input Anda untuk memastikan pengguna memasukkan alamat email yang valid.
- Kumpulkan kata sandi jika Anda mendaftar dengan nama pengguna (email) dan kata sandi.
- Kumpulkan kode akses satu kali email dari pengguna.
- Jika diperlukan, kumpulkan atribut pengguna.
- Kirim ulang kode akses satu kali jika pengguna tidak menerimanya.
- Mulai alur pendaftaran.
Di aplikasi Anda, tambahkan tombol, yang peristiwa pemilihannya memicu cuplikan kode berikut:
@IBAction func signUpPressed(_: Any) { guard let email = emailTextField.text else { resultTextView.text = "Email or password not set" return } nativeAuth.signUp(username: email, delegate: self) }
Untuk mendaftarkan pengguna menggunakan Kode akses satu kali email, kami menggunakan metode pustaka
signUp(username:delegate)
, yang merespons secara asinkron dengan memanggil salah satu metode pada objek delegasi yang diteruskan, yang harus menerapkanSignUpStartDelegate
protokol. Baris kode berikut memulai proses pendaftaran pengguna:nativeAuth.signUp(username: email, delegate: self)
Dalam metode ini
signUp(username:delegate)
, kami meneruskan alamat email pengguna dari formulir pengiriman dan delegasi (kelas yang mengimplementasikanSignUpStartDelegate
protokol).Untuk mendaftarkan pengguna menggunakan Email dengan kata sandi, gunakan cuplikan kode berikut:
@IBAction func signUpPressed(_: Any) { guard let email = emailTextField.text, let password = passwordTextField.text else { resultTextView.text = "Email or password not set" return } nativeAuth.signUp(username: email,password: password,delegate: self) }
kami menggunakan metode pustaka
signUp(username:password:delegate)
, yang merespons secara asinkron dengan memanggil salah satu metode pada objek delegasi yang diteruskan, yang harus menerapkanSignUpStartDelegate
protokol. Baris kode berikut memulai proses pendaftaran pengguna:nativeAuth.signUp(username: email, password: password, delegate: self)
Dalam metode ini
signUp(username:password:delegate)
, kami meneruskan alamat email pengguna, kata sandi mereka, dan delegasi (kelas yang menerapkanSignUpStartDelegate
protokol).Untuk menerapkan
SignUpStartDelegate
protokol sebagai ekstensi ke kelas kami, gunakan:extension ViewController: SignUpStartDelegate { func onSignUpStartError(error: MSAL.SignUpStartError) { resultTextView.text = "Error signing up: \(error.errorDescription ?? "no description")" } func onSignUpCodeRequired( newState: MSAL.SignUpCodeRequiredState, sentTo: String, channelTargetType: MSAL.MSALNativeAuthChannelType, codeLength: Int ) { resultTextView.text = "Verification code sent to \(sentTo)" } }
Panggilan ke
signUp(username:password:delegate)
atausignUp(username:delegate)
menghasilkan panggilan ke salah satuonSignUpCodeRequired()
atauonSignUpStartError()
mendelegasikan metode. dipanggilonSignUpCodeRequired(newState:sentTo:channelTargetType:codeLength)
untuk menunjukkan bahwa kode telah dikirim untuk memverifikasi alamat email pengguna. Seiring dengan beberapa detail di mana kode telah dikirim, dan berapa banyak digit yang dikandungnya, metode delegasi ini juga memilikinewState
parameter jenisSignUpCodeRequiredState
, yang memberi kita akses 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 menerapkan
SignUpVerifyCodeDelegate
protokol sebagai ekstensi ke kelas kami, gunakan:extension ViewController: SignUpVerifyCodeDelegate { func onSignUpVerifyCodeError(error: MSAL.VerifyCodeError, newState: MSAL.SignUpCodeRequiredState?) { resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")" } func onSignUpCompleted(newState: SignInAfterSignUpState) { resultTextView.text = "Signed up successfully!" } }
submitCode(code:delegate)
menerima parameter delegasi dan kita harus menerapkan metode yang diperlukan dalamSignUpVerifyCodeDelegate
protokol. Dalam skenario yang paling umum, kami menerima panggilan untukonSignUpCompleted(newState)
menunjukkan bahwa pengguna telah mendaftar dan alur selesai.
Kumpulkan atribut pengguna selama pendaftaran
Baik Anda mendaftarkan pengguna menggunakan kode akses satu kali email atau nama pengguna (email) dan kata sandi, Anda dapat mengumpulkan atribut pengguna sebelum akun pengguna dibuat. Metode ini signUp(username:attributes:delegate)
, menerima atribut sebagai parameter.
Untuk mengumpulkan atribut pengguna, gunakan cuplikan kode berikut:
let attributes = [ "country": "United States", "city": "Redmond" ] nativeAuth.signUp(username: email, attributes: attributes, delegate: self)
signUp(username:attributes:delegate)
AtauignUp(username:password:attributes:delegate)
menghasilkan panggilan ke salah satuonSignUpCodeRequired()
atauonSignUpStartError()
mendelegasikan metode, atau dalam panggilan keonSignUpAttributesInvalid(attributeNames: [String])
jika diimplementasikan dalam delegasi.Untuk menerapkan
SignUpStartDelegate
protokol sebagai ekstensi ke kelas kami, gunakan cuplikan kode berikut:extension ViewController: SignUpStartDelegate { func onSignUpStartError(error: MSAL.SignUpStartError) { resultTextView.text = "Error signing up: \(error.errorDescription ?? "no description")" } func onSignUpCodeRequired( newState: MSAL.SignUpCodeRequiredState, sentTo: String, channelTargetType: MSAL.MSALNativeAuthChannelType, codeLength: Int ) { resultTextView.text = "Verification code sent to \(sentTo)" } func onSignUpAttributesInvalid(attributeNames: [String]) { resultTextView.text = "Invalid attributes \(attributeNames)" } }
Jika atribut tidak valid, metode
onSignUpAttributesInvalid(attributeNames: [String])
dipanggil. Dalam hal ini, kami menampilkan daftar atribut yang tidak valid kepada pengguna. Jika tidak, dipanggilonSignUpCodeRequired(newState:sentTo:channelTargetType:codeLength)
untuk menunjukkan bahwa kode telah dikirim untuk memverifikasi alamat email pengguna. Selain detail seperti penerima kode, dan jumlah digit kode, metode delegasi ini memilikinewState
parameter jenisSignUpCodeRequiredState
, yang memberi kita akses ke dua metode baru:submitCode(code:delegate)
resendCode(delegate)
Atribut pengguna di satu atau beberapa halaman
Untuk menyebarkan atribut di satu atau beberapa halaman, kita harus mengatur atribut yang ingin kita kumpulkan di berbagai halaman sebagai wajib dalam konfigurasi penyewa manajemen identitas dan akses pelanggan (CIAM).
Kami memanggil signUp(username:password:delegate)
tanpa meneruskan atribut apa pun. Langkah selanjutnya adalah memanggil newState.submitCode(code: userSuppliedCode, delegate: self)
untuk memverifikasi email pengguna.
Kami menerapkan SignUpVerifyCodeDelegate
protokol sebagai ekstensi ke kelas kami seperti sebelumnya, tetapi kali ini kita harus menerapkan metode onSignUpAttributesRequired(attributes:newState)
opsional selain metode yang diperlukan:
extension ViewController: SignUpVerifyCodeDelegate {
func onSignUpAttributesRequired(newState: SignUpAttributesRequiredState) {
resultTextView.text = "Attributes required"
}
func onSignUpVerifyCodeError(error: MSAL.VerifyCodeError, newState: MSAL.SignUpCodeRequiredState?) {
resultTextView.text = "Error verifying code: \(error.errorDescription ?? "no description")"
}
func onSignUpCompleted(newState: SignInAfterSignUpState) {
resultTextView.text = "Signed up successfully!"
}
}
Metode delegasi ini memiliki newState
parameter jenis SignUpAttributesRequiredState
, yang memberi kami akses ke metode baru:
submitAttributes(attributes:delegate)
Untuk mengirimkan atribut yang disediakan pengguna kepada kami, gunakan cuplikan kode berikut:
let attributes = [
"country": "United States",
"city": "Redmond"
]
newState.submitAttributes(attributes: attributes, delegate: self)
Kami juga akan menerapkan SignUpAttributesRequiredDelegate
protokol sebagai ekstensi ke kelas kami:
extension ViewController: SignUpAttributesRequiredDelegate {
func onSignUpAttributesRequiredError(error: AttributesRequiredError) {
resultTextView.text = "Error submitting attributes: \(error.errorDescription ?? "no description")"
}
func onSignUpAttributesRequired(attributes: [MSALNativeAuthRequiredAttribute], newState: SignUpAttributesRequiredState) {
resultTextView.text = "Attributes required"
}
func onSignUpAttributesInvalid(attributeNames: [String], newState: SignUpAttributesRequiredState) {
resultTextView.text = "Attributes invalid"
}
func onSignUpCompleted(newState: SignInAfterSignUpState) {
resultTextView.text = "Signed up successfully!"
}
}
Ketika pengguna tidak menyediakan semua atribut yang diperlukan, atau atribut tidak valid, metode delegasi ini dipanggil:
onSignUpAttributesInvalid
: menunjukkan bahwa satu atau beberapa atribut yang dikirim gagal input validasi. Kesalahan ini berisi parameter attributeNames, yang merupakan daftar semua atribut yang dikirim oleh pengembang yang gagal melakukan validasi input.onSignUpAttributesRequired
: menunjukkan bahwa server memerlukan satu atau beberapa atribut untuk dikirim, sebelum akun pengguna dapat dibuat. Ini terjadi ketika satu atau beberapa atribut ditetapkan sebagai wajib dalam konfigurasi penyewa. Hasil ini berisi parameter atribut, yang merupakan daftarMSALNativeAuthRequiredAttribute
objek, yang menguraikan detail tentang atribut pengguna yang diperlukan API.
Kedua metode delegasi berisi referensi status baru. Kami menggunakan newState
parameter untuk memanggil submitAttributes(attributes:delegate)
lagi dengan atribut baru.
Menangani kesalahan pendaftaran
Selama pendaftaran, tidak setiap tindakan berhasil. Misalnya, pengguna mungkin mencoba mendaftar dengan alamat email yang sudah digunakan, atau mengirimkan kode yang tidak valid.
Dalam implementasi SignUpStartDelegate
protokol sebelumnya, kami hanya menampilkan kesalahan ketika kami menangani onSignUpStartError(error)
fungsi delegasi.
Untuk meningkatkan pengalaman pengguna dengan mengelola jenis kesalahan tertentu, gunakan cuplikan kode berikut:
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isUserAlreadyExists {
resultTextView.text = "Unable to sign up: User already exists"
} else if error.isInvalidPassword {
resultTextView.text = "Unable to sign up: The password is invalid"
} else if error.isInvalidUsername {
resultTextView.text = "Unable to sign up: The username is invalid"
} else {
resultTextView.text = "Unexpected error signing up: \(error.errorDescription ?? "no description")"
}
}
Opsional: Masuk setelah alur pendaftaran
Setelah alur pendaftaran berhasil, Anda dapat masuk ke pengguna tanpa memulai alur masuk. Pelajari lebih lanjut di artikel Tutorial: Masuk pengguna secara otomatis setelah mendaftar di aplikasi iOS/macOS.