【问题标题】:How to remember devices using AWS Amplify SDK?如何使用 AWS Amplify SDK 记住设备?
【发布时间】:2020-09-13 23:32:09
【问题描述】:

我已经使用 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)")
            }
        }

    }

【问题讨论】:

  • 如果您使用其中一种 Web UI 登录方法,设备记忆功能将不起作用。 link

标签: swift amazon-web-services aws-amplify


【解决方案1】:

据我所知,您需要检查用户是否登录。为此,您需要在应用程序的开头或检查用户状态的任何位置添加此代码:

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
        }
    }
}

【讨论】:

  • 执行此代码后,我发现了另一个错误。每当我登录时,我都会打印此函数 print(AWSMobileClient.default().isSignedIn),即使我已经登录,它也会返回 false。
猜你喜欢
  • 2017-12-01
  • 2018-07-25
  • 2020-04-26
  • 2021-06-25
  • 1970-01-01
  • 2021-09-04
  • 2020-01-24
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多