AWS Amplify Swift API 登录 iOS 移动应用程序
AWS Amplify Swift API login iOS Mobile App
我正在关注 docs 通过 API、
实现登录
class AWSUserPool {
var userAuthenticationError: Error?
AWSMobileClient.default().signIn(username: <param username>, password: <param password>) { (signInResult, error) in
if let error = error {
print("\(error.localizedDescription)")
self.userAuthenticationError = error
} else if let signInResult = signInResult {
switch (signInResult.signInState) {
case .signedIn:
print("User is signed in.")
case .smsMFA:
print("SMS message sent to \(signInResult.codeDetails!.destination!)")
default:
print("Sign In needs info which is not yet supported.")
}
}
}
}
我已经实例化了 class 并且在提供正确的凭据时登录有效,我想将错误消息显示为警报,但我可以打印可选的错误(未找到用户。 ...) 但我无法将其分配给 class 变量。
import RxSwift
let observable: Observable<Error?> = Observable<Error?>.just(self.awsUserPool?.userAuthenticationError)
let disposeBag = DisposeBag()
observable.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
我会先围绕 AWSMobileClient
编写一个响应式包装器,如下所示:
extension Reactive where Base: AWSMobileClient {
func signIn(username: String, password: String) -> Observable<SignInResult> {
return Observable.create { observer in
self.base.signIn(username: username, password: password) { (signinResult, error) in
if let signinResult = signinResult {
observer.onNext(signinResult)
observer.onCompleted()
}
else {
observer.onError(error ?? RxError.unknown)
}
}
return Disposables.create()
}
}
}
然后将错误放入 Observable 中,执行如下操作:
class AWSUserPool {
let userAuthenticationError: Observable<Error>
private let disposeBag = DisposeBag()
init(username: String, password: String) {
let result = AWSMobileClient.default().rx.signIn(username: username, password: password)
.materialize()
result
.compactMap { [=11=].element }
.subscribe(onNext: { signinResult in
switch signinResult.signInState {
case .signedIn:
print("User is signed in.")
case .smsMFA:
print("SMS message sent to \(signinResult.codeDetails!.destination!)")
default:
print("Sign In needs info which is not yet supported.")
}
})
.disposed(by: disposeBag)
userAuthenticationError = result.compactMap { [=11=].error }
}
}
虽然我可能不会为 AWSUserPool 而烦恼...这取决于您。
我正在关注 docs 通过 API、
实现登录class AWSUserPool {
var userAuthenticationError: Error?
AWSMobileClient.default().signIn(username: <param username>, password: <param password>) { (signInResult, error) in
if let error = error {
print("\(error.localizedDescription)")
self.userAuthenticationError = error
} else if let signInResult = signInResult {
switch (signInResult.signInState) {
case .signedIn:
print("User is signed in.")
case .smsMFA:
print("SMS message sent to \(signInResult.codeDetails!.destination!)")
default:
print("Sign In needs info which is not yet supported.")
}
}
}
}
我已经实例化了 class 并且在提供正确的凭据时登录有效,我想将错误消息显示为警报,但我可以打印可选的错误(未找到用户。 ...) 但我无法将其分配给 class 变量。
import RxSwift
let observable: Observable<Error?> = Observable<Error?>.just(self.awsUserPool?.userAuthenticationError)
let disposeBag = DisposeBag()
observable.subscribe { event in
print(event)
}
.disposed(by: disposeBag)
我会先围绕 AWSMobileClient
编写一个响应式包装器,如下所示:
extension Reactive where Base: AWSMobileClient {
func signIn(username: String, password: String) -> Observable<SignInResult> {
return Observable.create { observer in
self.base.signIn(username: username, password: password) { (signinResult, error) in
if let signinResult = signinResult {
observer.onNext(signinResult)
observer.onCompleted()
}
else {
observer.onError(error ?? RxError.unknown)
}
}
return Disposables.create()
}
}
}
然后将错误放入 Observable 中,执行如下操作:
class AWSUserPool {
let userAuthenticationError: Observable<Error>
private let disposeBag = DisposeBag()
init(username: String, password: String) {
let result = AWSMobileClient.default().rx.signIn(username: username, password: password)
.materialize()
result
.compactMap { [=11=].element }
.subscribe(onNext: { signinResult in
switch signinResult.signInState {
case .signedIn:
print("User is signed in.")
case .smsMFA:
print("SMS message sent to \(signinResult.codeDetails!.destination!)")
default:
print("Sign In needs info which is not yet supported.")
}
})
.disposed(by: disposeBag)
userAuthenticationError = result.compactMap { [=11=].error }
}
}
虽然我可能不会为 AWSUserPool 而烦恼...这取决于您。