You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS端amplify-swift 1.15.1登录流程抛出Amplify.AuthError error 2求助

问题分析与解决办法

首要问题:混用两套认证API的状态判断

你代码里用AWSMobileClient.default().isSignedIn判断登录状态,但后续登出、登录却用Amplify的接口——这两套API的状态管理是相互独立的,状态不同步就会触发异常。比如Amplify的会话已经失效,但AWSMobileClient还显示已登录,这时执行登出操作就可能因为会话不一致抛出AuthError error 2。

代码修正:统一用Amplify的状态判断

把状态判断换成Amplify自身的fetchAuthSession接口,彻底抛弃AWSMobileClient的状态判断:

func nativeLogin(
  email: String?, password: String?, completion: @escaping (Result<Authstate, Error>) -> Void
) {
  Amplify.Auth.fetchAuthSession { [weak self] result in
    guard let self = self else { return }
    DispatchQueue.main.async {
      switch result {
      case .success(let session):
        if session.isSignedIn {
          let options = AuthSignOutRequest.Options(globalSignOut: true)
          Amplify.Auth.signOut(options: options) { signOutResult in
            DispatchQueue.main.async {
              switch signOutResult {
              case .success:
                guard let email = email, let password = password else {
                  self.response(completion, .failure(AuthError.passwordValidationError("Missing Email/Password")))
                  return
                }
                self.signIn(email: email, password: password, completion: completion)
              case .failure(let error):
                completion(.failure(error))
              }
            }
          }
        } else {
          guard let email = email, let password = password else {
            self.response(completion, .failure(AuthError.passwordValidationError("Missing Email/Password")))
            return
          }
          self.signIn(email: email, password: password, completion: completion)
        }
      case .failure(let error):
        completion(.failure(error))
      }
    }
  }
}

版本升级的必要性

Amplify Swift 1.15.1到2.2.1之间修复了不少认证相关的bug,包括:

  • 全局登出后本地会话清理不彻底的问题
  • 认证状态同步逻辑优化
  • 部分场景下AuthError error 2(一般对应会话过期或无效)的修复

如果修正代码后还是有问题,建议直接升级到2.2.1,升级后记得重新拉取Amplify配置文件,避免版本不兼容。

额外排查方向

  • 检查你的signIn方法实现,确认是否正确处理了Amplify的回调,有没有遗漏错误分支
  • 排查用户设备的网络情况,全局登出需要和Cognito服务端同步,网络波动可能导致登出不彻底,进而引发登录错误

内容的提问来源于stack exchange,提问作者Apoplectic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:35:18