Ошибка при инициализации клиента appsync. invalidAuthConfiguration(«AWSCognitoUserPoolsAuthProvider не может быть равен нулю.»)

#swift #aws-amplify #aws-appsync

#swift #aws-усилить #aws-appsync

Вопрос:

Я использую AWS amplify для создания серверной части моего приложения для ios. У меня возникла проблема с инициализацией клиента appsync. Я добавил аутентификацию в серверную часть и вошел в систему, но в консоли я получаю следующую ошибку:

КОНСОЛЬ:

 Error initializing appsync client. invalidAuthConfiguration("AWSCognitoUserPoolsAuthProvider cannot be nil.")
  

В AppDelegate:

 // CONFIGURE AWSAppSync
        do {
            // You can choose your database location if you wish, or use the default
            let cacheConfiguration = try AWSAppSyncCacheConfiguration()
            
            // AppSync configuration amp; client initialization
            let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: AWSAppSyncServiceConfig(), cacheConfiguration: cacheConfiguration)
            
            appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
            print("appSyncClient initialise success n")
        } catch {
            print("Error initializing appsync client. (error)")
        }
  

Я просто предполагаю здесь, но переменная ‘appSyncConfig’ должна быть:

 let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: AWSAppSyncServiceConfig.init(), cacheConfiguration: cacheConfiguration, userPoolsAuthProvider: AWSCognitoUserPoolsAuthProvider?)
  

Но как мне получить AWSCognitoUserPoolsAuthProvider????

Ответ №1:

При настройке AWS AppSync вам не хватает шага, который добавляет класс для получения токенов из пулов пользователей Cognito. Конечно, здесь я предполагаю, что вы выбрали пул пользователей Cognito в качестве типа авторизации по умолчанию!

Пожалуйста, дайте мне знать, если у вас есть еще какие-либо вопросы по поводу настройки amplify GraphQL или чего-то еще!

 import UIKit
import AWSAppSync
import AWSMobileClient

class MyCognitoUserPoolsAuthProvider : AWSCognitoUserPoolsAuthProviderAsync {
    func getLatestAuthToken(_ callback: @escaping (String?, Error?) -> Void) {
        AWSMobileClient.default().getTokens { (tokens, error) in
            if error != nil {
                callback(nil, error)
            } else {
                callback(tokens?.idToken?.tokenString, nil)
            }
        }
    }
}
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate {
    var window: UIWindow?
   
    var appSyncClient: AWSAppSyncClient?
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        //// Override point for customization after application launch.
        self.initializeAppSync()
        return true
    }
    
    func initializeAppSync() {
        do {
            // You can choose the directory in which AppSync stores its persistent cache databases
            let cacheConfiguration = try AWSAppSyncCacheConfiguration()
            
            // Initialize the AWS AppSync configuration
            let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig:
                                                                    AWSAppSyncServiceConfig(),
                                                                  userPoolsAuthProvider: MyCognitoUserPoolsAuthProvider(),
                                                                  cacheConfiguration: cacheConfiguration)
            
            // Initialize the AWS AppSync client
            appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig)
            print("appSyncClient initialise success.")
        } catch {
            print("Error initializing appsync client. (error)")
        }
    }
    
}