Öğretici: Yerel kimlik doğrulaması kullanarak iOS/macOS uygulamasında kaydolma ekleme
Şunlar için geçerlidir: iOS (Swift) macOS (Swift)
Bu öğreticide, tek seferlik geçiş kodu veya kullanıcı adı (e-posta) ve parola kullanarak bir kullanıcının nasıl kaydolduğunu gösterir ve yerel kimlik doğrulaması kullanarak iOS/macOS uygulamanızda kullanıcı özniteliklerini toplar.
- Tek seferlik geçiş kodu veya kullanıcı adı (e-posta) ve parola kullanarak bir kullanıcıya kaydolun.
- Kaydolma sırasında kullanıcı özniteliklerini toplayın.
- Kaydolma hatalarını işleme.
Önkoşullar
- Öğretici: iOS/macOS uygulamanızı yerel kimlik doğrulaması için hazırlama.
- Kaydolma sırasında kullanıcı özniteliklerini toplamak istiyorsanız, kaydolma ve oturum açma kullanıcı akışınızı oluştururken kullanıcı özniteliklerini yapılandırın.
Kullanıcı kaydolma
Tek seferlik geçiş kodunu veya kullanıcı adını (e-posta) ve parolayı kullanarak bir kullanıcıya kaydolmak için, kullanıcıdan bir e-posta toplar ve ardından kullanıcıya tek seferlik bir e-posta geçiş kodu içeren bir e-posta gönderirsiniz. Kullanıcı, kullanıcı adını doğrulamak için tek seferlik geçerli bir e-posta geçiş kodu girer.
Bir kullanıcıya kaydolmak için şunları yapmanız gerekir:
Kullanıcı arabirimi (UI) oluşturma:
- Kullanıcıdan bir e-posta toplayın. Kullanıcının geçerli bir e-posta adresi girdiğinden emin olmak için girişlerinize doğrulama ekleyin.
- Kullanıcı adı (e-posta) ve parola ile kaydolarak bir parola toplayın.
- Kullanıcıdan tek seferlik bir e-posta geçiş kodu toplayın.
- Gerekirse kullanıcı özniteliklerini toplayın.
- Kullanıcı bunu almazsa tek seferlik geçiş kodunu yeniden gönderin.
- Kaydolma akışını başlatın.
Uygulamanızda, seçme olayı aşağıdaki kod parçacığını tetikleyen bir düğme ekleyin:
@IBAction func signUpPressed(_: Any) { guard let email = emailTextField.text else { resultTextView.text = "Email or password not set" return } nativeAuth.signUp(username: email, delegate: self) }
E-posta tek seferlik geçiş kodunu kullanarak bir kullanıcıya kaydolmak için, geçirilen temsilci nesnesinde protokolü uygulaması gereken yöntemlerden birini çağırarak zaman uyumsuz olarak yanıt veren kitaplığın
signUp(username:delegate)
SignUpStartDelegate
yöntemini kullanırız. Aşağıdaki kod satırı, kullanıcı kayıt işlemini başlatır:nativeAuth.signUp(username: email, delegate: self)
yönteminde
signUp(username:delegate)
, kullanıcının e-posta adresini gönderim formundan ve temsilciden (protokolü uygulayanSignUpStartDelegate
bir sınıf) geçiririz.Parolayla e-posta kullanarak bir kullanıcıya kaydolmak için aşağıdaki kod parçacıklarını kullanın:
@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) }
geçirilen temsilci nesnesinde protokolü uygulaması gereken yöntemlerden birini çağırarak zaman uyumsuz olarak yanıt veren kitaplığın
signUp(username:password:delegate)
SignUpStartDelegate
yöntemini kullanırız. Aşağıdaki kod satırı, kullanıcı kayıt işlemini başlatır:nativeAuth.signUp(username: email, password: password, delegate: self)
yönteminde
signUp(username:password:delegate)
kullanıcının e-posta adresini, parolasını ve temsilciyi (protokolü uygulayanSignUpStartDelegate
bir sınıf) geçiririz.Protokolü sınıfımızın uzantısı olarak uygulamak
SignUpStartDelegate
için şunu kullanın: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)" } }
veya çağrısı
signUp(username:password:delegate)
signUp(username:delegate)
, yaonSignUpStartError()
daonSignUpCodeRequired()
temsilci yöntemlerine yönelik bir çağrıyla sonuç verir.onSignUpCodeRequired(newState:sentTo:channelTargetType:codeLength)
, kullanıcının e-posta adresini doğrulamak için bir kod gönderildiğini belirtmek için çağrılır. Kodun nereye gönderildiğine ve kaç basamak içerdiğine ilişkin bazı ayrıntıların yanı sıra, bu temsilci yönteminin türündeSignUpCodeRequiredState
birnewState
parametresi de vardır ve bu da iki yeni yönteme erişmemizi sağlar:submitCode(code:delegate)
resendCode(delegate)
Kullanıcının bize sağladığı kodu göndermek için şunu kullanın:
newState.submitCode(code: userSuppliedCode, delegate: self)
Protokolü sınıfımızın uzantısı olarak uygulamak
SignUpVerifyCodeDelegate
için şunu kullanın: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!" } }
bir
submitCode(code:delegate)
temsilci parametresi kabul eder ve protokoldeSignUpVerifyCodeDelegate
gerekli yöntemleri uygulamamız gerekir. En yaygın senaryoda, kullanıcının kaydolduğunu ve akışın tamamlandığını belirten bir çağrısıonSignUpCompleted(newState)
alırsınız.
Kaydolma sırasında kullanıcı özniteliklerini toplama
Bir kullanıcıyı tek seferlik geçiş kodu veya kullanıcı adı (e-posta) ve parola kullanarak kaydolsanız da, kullanıcının hesabı oluşturulmadan önce kullanıcı özniteliklerini toplayabilirsiniz. signUp(username:attributes:delegate)
yöntemi, öznitelikleri parametre olarak kabul eder.
Kullanıcı özniteliklerini toplamak için aşağıdaki kod parçacığını kullanın:
let attributes = [ "country": "United States", "city": "Redmond" ] nativeAuth.signUp(username: email, attributes: attributes, delegate: self)
signUp(username:attributes:delegate)
veyaignUp(username:password:attributes:delegate)
, ya daonSignUpCodeRequired()
onSignUpStartError()
temsilci yöntemlerine yönelik bir çağrıyla ya da temsilcide uygulandıysa çağrısıylaonSignUpAttributesInvalid(attributeNames: [String])
sonuçlanır.Protokolü sınıfımızın uzantısı olarak uygulamak
SignUpStartDelegate
için aşağıdaki kod parçacığını kullanın: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)" } }
Öznitelikler geçersizse yöntemi
onSignUpAttributesInvalid(attributeNames: [String])
çağrılır. Bu durumda, kullanıcıya geçersiz özniteliklerin listesini görüntüleriz. Aksi takdirde,onSignUpCodeRequired(newState:sentTo:channelTargetType:codeLength)
kullanıcının e-posta adresini doğrulamak için bir kod gönderildiğini belirtmek için çağrılır. Kodun alıcısı ve kodun basamak sayısı gibi ayrıntılar dışında, bu temsilci yönteminin türündeSignUpCodeRequiredState
birnewState
parametresi vardır ve bu da iki yeni yönteme erişmemizi sağlar:submitCode(code:delegate)
resendCode(delegate)
Bir veya daha fazla sayfada kullanıcı öznitelikleri
Öznitelikleri bir veya daha fazla sayfaya yaymak için, farklı sayfalarda toplamak istediğimiz öznitelikleri müşteri kimliği ve erişim yönetimi (CIAM) kiracı yapılandırmasında zorunlu olarak ayarlamamız gerekir.
Hiçbir öznitelik geçirmeden çağırırız signUp(username:password:delegate)
. Sonraki adım, kullanıcının e-postasını doğrulamak için arama newState.submitCode(code: userSuppliedCode, delegate: self)
yapmak olacaktır.
Protokolü daha önce olduğu gibi sınıfımızın bir uzantısı olarak uygularız SignUpVerifyCodeDelegate
, ancak bu kez gerekli yöntemlere ek olarak isteğe bağlı yöntemi onSignUpAttributesRequired(attributes:newState)
uygulamamız gerekir:
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!"
}
}
Bu temsilci yöntemi, yeni bir yönteme erişmemizi sağlayan türünde SignUpAttributesRequiredState
bir newState
parametresine sahiptir:
submitAttributes(attributes:delegate)
Kullanıcının bize sağladığı öznitelikleri göndermek için aşağıdaki kod parçacığını kullanın:
let attributes = [
"country": "United States",
"city": "Redmond"
]
newState.submitAttributes(attributes: attributes, delegate: self)
Ayrıca protokolü sınıfımızın bir uzantısı olarak uygulayacağız SignUpAttributesRequiredDelegate
:
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!"
}
}
Kullanıcı tüm gerekli öznitelikleri sağlamadığında veya öznitelikler geçersizse, bu temsilci yöntemleri çağrılır:
onSignUpAttributesInvalid
: gönderilen bir veya daha fazla özniteliğin giriş doğrulamasında başarısız olduğunu gösterir. Bu hata, geliştirici tarafından giriş doğrulaması başarısız olan tüm özniteliklerin listesi olan bir attributeNames parametresi içeriyor.onSignUpAttributesRequired
: kullanıcı hesabının oluşturulabilmesi için sunucunun bir veya daha fazla özniteliğin gönderilmesini gerektirdiğini belirtir. Kiracı yapılandırmasında bir veya daha fazla öznitelik zorunlu olarak ayarlandığında bu durum ortaya çıkar. Bu sonuç, API'ninMSALNativeAuthRequiredAttribute
gerektirdiği kullanıcı öznitelikleriyle ilgili ayrıntıları özetleyen nesnelerin listesi olan attributes parametresini içerir.
Her iki temsilci yöntemi de yeni bir durum başvurusu içerir. Parametresini newState
yeni özniteliklerle yeniden çağırmak submitAttributes(attributes:delegate)
için kullanırız.
Kaydolma hatalarını işleme
Kaydolma sırasında her eylem başarılı olmaz. Örneğin, kullanıcı zaten kullanımda olan bir e-posta adresiyle kaydolmaya çalışabilir veya geçersiz bir kod gönderebilir.
Önceki protokol uygulamamızda SignUpStartDelegate
, temsilci işlevini işlediğimizde onSignUpStartError(error)
hatayı görüntüledik.
Belirli bir hata türünü yöneterek kullanıcı deneyimini geliştirmek için aşağıdaki kod parçacığını kullanın:
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")"
}
}
İsteğe bağlı: Kayıt akışı sonrasında oturum açma
Başarılı bir kayıt akışı sonrasında, oturum açma akışı başlatmadan bir kullanıcıyla oturum açabilirsiniz. Öğretici: iOS/macOS uygulamasına kaydoldıktan sonra kullanıcıyı otomatik olarak oturum açma makalesinde daha fazla bilgi edinin.