swift - 如何使用 AWS Amplify SDK 记住设备?
问题描述
我已经使用 AWS Amplify 实现了注册/登录功能,并使用我自己的 View 控制器而不是 Drop-in auth 快速实现。一旦我退出应用程序并重新启动它,问题就开始了。在我这样做之后,用户不再登录。我已将记住设备设置为始终在用户池设置中。有没有人遇到过这个问题?这是我的功能,用户得到确认,一切正常,除了记住用户
@objc func confirm(){
print("confirm pressed")
guard let verificationCode = verificationTextField.text else{
return
}
AWSMobileClient.default().confirmSignUp(username: username, confirmationCode: verificationCode) { (signUpResult, error) in
if let signUpResult = signUpResult{
switch(signUpResult.signUpConfirmationState){
case .confirmed:
AWSMobileClient.default().deviceOperations.updateStatus(remembered: true) { (result, error) in //This is where I try to save the users device
print("User is signed up and confirmed")
DispatchQueue.main.async {
let signedInTabBar = SignedInTabBarController()
self.view.window!.rootViewController = signedInTabBar
}
}
case .unconfirmed:
print("User is not confirmed and needs verification via \(signUpResult.codeDeliveryDetails!.deliveryMedium) sent at \(signUpResult.codeDeliveryDetails!.destination!)")
case.unknown:
print("Unexpected case")
}
}else if let error = error {
print("\(error.localizedDescription)")
}
}
}
解决方案
据我所知,您需要检查用户是否登录。为此,您需要在应用程序的开头或检查用户状态的任何位置添加此代码:
AWSMobileClient.default().initialize { userState, error in
OperationQueue.main.addOperation {
if let error = error {
AWSMobileClient.default().signOut()
assertionFailure("Logic after init error: \(error.localizedDescription)")
}
guard let userState = userState else {
AWSMobileClient.default().signOut()
return
}
guard userState == .signedIn else {
return
}
}
}
推荐阅读
- flask - 在 jinja 模板中使用其他变量创建新的多行字符串变量
- checkbox - ngx 数据表默认选择复选框
- javascript - dialogflow 错误:14 不可用:从插件获取元数据失败并出现错误:生成器已在运行
- html - 水平菜单到垂直菜单,无需添加任何额外的 HTML 属性
- angular - 仅获取新发出的值
- bash - bash - 使用 set -e 时如何处理退出代码并获取命令输出
- javascript - 是否可以在 Nestjs 中的一种方法上使用多个装饰器?
- amazon-web-services - AWS Storage Gateway 连接问题
- facebook-graph-api - 如何通过 Facebook graph api 获取详细的共享 url 数据
- javascript - 无法在 vue-test-utils 中使用 $route 设置模拟