Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?

Posted

技术标签:

【中文标题】Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?【英文标题】:Swift - AWS Cognito using Amplify - How to get tokens after log in in swift? 【发布时间】:2021-10-25 14:37:36 【问题描述】:

成功登录后,我正在努力获取用户令牌。 我唯一得到的是当前的 userId 和用户名,但我无法获得用户令牌。

     func login(userData: RegistrationFields) 
        _ = Amplify.Auth.signIn(username: userData.email.data, password: userData.password.data) 
            [weak self] result in
                switch result 
                case .success(let signInResult):
                    if signInResult.isSignedIn 
                        self?.getCurrentUser()
                        debugPrint("Sign in succeeded")
                    
                case .failure(let error):
                    debugPrint("Sign in failed \(error)")
                    self?.authStateDelegate?.authState(state: .error(error: error))
                
            
    

   func getCurrentUser() 
        guard let user = Amplify.Auth.getCurrentUser() else return
        self.authStateDelegate?.authState(state: .session(user: user))
    

【问题讨论】:

【参考方案1】:

在您登录成功回调后,您可以执行以下操作:

Amplify.Auth.fetchAuthSession  result in
        switch result 
        case .success(let session):
            if session.isSignedIn 
                do 
                    if let cognitoTokenProvider = session as? AuthCognitoTokensProvider 
                        let tokens = try cognitoTokenProvider.getCognitoTokens().get()
                        //tokens.idToken - is ID token. Access and refresh tokens also can be found here
                    
                 catch 
                    //error
                
             else 
                //Not Logged in
            
        case .failure(let error):
            print("Fetch session failed with error \(error)")
        
    

【讨论】:

谢谢!这正是我所需要的【参考方案2】:

这对我有用:

首先,导入AmplifyPlugins

import AmplifyPlugins

_ = Amplify.Auth.fetchAuthSession  result in
  switch result 
  case .success(let session):
    if(session.isSignedIn) 
      if let sess = session as? AWSAuthCognitoSession 
        let result = sess.getCognitoTokens()
        switch result 
          case .success(let tokens):
            let accessToken = tokens.accessToken
            let idToken = tokens.idToken
            let refreshToken = tokens.refreshToken
          case .failure(let error):
            print("Fetch user tokens failed with error \(error)")
        
      
    
  case .failure(let error):
    print("Fetch session failed with error \(error)")
  

【讨论】:

以上是关于Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?的主要内容,如果未能解决你的问题,请参考以下文章

AWS iOS SDK Cognito 开发人员身份验证 (Swift)

AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”

Swift 中的 AWS Cognito getSession 导致来自 API GW 的 401 未授权

在 DotNet 中创建 AWS Cognito PreSignup Lambda

将 Cognito 中的用户信息与 AWS Amplify GraphQL 关联

将Cognito的用户信息与AWS Amplify GraphQL关联起来。