Я некоторое время искал в интернете, и до сих пор не получил правильного ответа, потому что ответов действительно много, но некоторые из них, я могу сказать, уже обесценились (вероятно).
В настоящее время в нашем приложении уже реализован пул пользователей AWS Cognito, и мы можем войти через имя пользователя и пароль напрямую. Я пытаюсь выяснить, как это работает, и добавил Facebook Login SDK. Похоже, мне нужно сделать много вещей, прежде чем вводить FB Login. Наш клиент предоставил нам только идентификатор пула пользователей AWS, и я запрашиваю федеративный идентификатор, так как я нашел его в учебниках и темах Stackoverflow. А мой менеджер проекта настаивает на том, что внедрение FB Login должно быть довольно простым и легким, чтобы AWS не требовался очень сложный процесс для реализации этого. Но я хочу доказать, что они не правы.
Поэтому я искал много инструкций. Я добавил этот блок кода:
override func logins () -> AWSTask<NSDictionary> {
if(/*logic to determine if user is unauthenticated*/) {
return AWSTask(result:nil)
}else if (/*logic to determine if user is Facebook*/){
if let token = AccessToken.current?.authenticationToken {
return AWSTask(result: [AWSIdentityProviderFacebook:token])
}
return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
}else {
return super.logins()
}
}
Это из документации AWS: https://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html
Они не дают достаточно руководств, поэтому я не понимаю, что я делаю. Затем я нашел несколько ответов, чтобы использовать это:
let credentialsProvider = AWSCognitoCredentialsProvider(
regionType: AWSRegionType.APSoutheast1,
identityPoolId: "ap-southeast-1:1f32a5d2-eb10-44da-8f07-fac95614a577",
identityProviderManager: FacebookProvider())
let configuration = AWSServiceConfiguration(
region: .APSoutheast1,
credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
credentialsProvider.getIdentityId().continueWith(block: { (task) in
guard task.error == nil else {
print(task.error)
return nil
}
// We've got a session and now we can access AWS service via default()
// e.g.: let cognito = AWSCognito.default()
return task
})
Я нашел этот код из этого руководства: https://medium.com/@dkabyshev/api-less-backend-for-ios-with-aws-in-swift-part-1-cf230f080af5
Итак, я сказал ранее, что некоторые из руководств, возможно, уже устарели. Если вы посмотрите на строку кода let cognito = AWSCognito.default()
, я пытаюсь вызвать ту же строку, но она не распознается. Возможно, AWS Cognito SDK уже обновил его, и я не знаю, какой класс и метод вызывают одно и то же. Но это не единственное, что меня так смущает.
В этой строке: AWSCognitoIdentityUserPool(forKey: "userpool")
, он должен уже иметь currentUser()
при входе в систему, но при использовании FB его нет.
Итак, мой последний вопрос: после credentialsProvider.getIdentityId().continueWith(block:)
какие коды я должен использовать для продолжения входа в систему и получения сеансов? Я делаю это правильно? Большое спасибо!