当前位置: 首页 > 面试题库 >

AWS Cognito Swift凭证提供程序“不建议使用登录:使用AWSIdentityProviderManager”

井通
2023-03-14
问题内容

我试图允许用户使用Facebook和Amazon Cognito来注册我的应用程序。我发现以前的文档说要使用:

    let token = FBSDKAccessToken.currentAccessToken().tokenString
    var logins: NSDictionary = NSDictionary(dictionary: ["graph.facebook.com" : token])
    credentialsProvider.logins = [AWSIdentityProviderFacebook: token]

但是我收到一条消息,提示已弃用登录名,并使用协议AWSIdentityProviderManager向凭证提供程序提供登录名,我不知道该怎么做。我尝试让我的类实现AWSIdentityProviderManager并创建了一个logins方法,因为我注意到凭据提供者有一个方法“
setIdentiyProviderManagerOnce(self)”,但是我不知道在实现的logins()方法中如何将Facebook令牌连接到凭据上经理。

香港专业教育学院看过亚马逊的github例子,但我似乎并没有太大帮助


问题答案:

环顾四周后,我终于发现我不是唯一遇到此问题的人。AWS在不更改其主要文档的情况下更新了他们的SDK。解决方案是在自定义类中实现AWSCognitoIdentityProviderManager并将其提供给凭证提供者。继承人simaomi在下面的github讨论中提供的代码(更多是快速修复):

import Foundation
import AWSCore
import AWSCognito
import AWSCognitoIdentityProvider
class CustomIdentityProvider: NSObject, AWSCognitoIdentityProviderManager{
    var tokens : [NSString : NSString]?
    init(tokens: [NSString : NSString]) {
        self.tokens = tokens
    }
    @objc func logins() -> AWSTask {
        return AWSTask(result: tokens)
    }
}


let customProviderManager = CustomIdentityProvider(tokens: logins!)

self.credentialsProvider = AWSCognitoCredentialsProvider(
   regionType: Constants.COGNITO_REGIONTYPE,
   identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID,
   identityProviderManager: customProviderManager)

sdk示例显示了您应如何真正实施解决方案

在这里查看讨论内容:https :
//github.com/aws/aws-sdk-ios/issues/357

此处提供了更新的sdk示例:https :
//github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-
identities-2-4/CognitoSync-Sample



 类似资料:
  • 我已经创建了身份提供程序,并且从浏览器中它工作正常。 参考:密钥斗篷身份提供程序后代理登录抛出错误 从浏览器,我可以使用外部IDP登录,如果外部IDP用户不在keycloak中,它会在keyclock中创建,这绝对没问题,并重定向到仪表板。 但我的问题是,我们如何用keycloak rest api实现这个流程? 是否有任何api用于使用外部IDP登录,并将获得外部IDP的令牌以及密钥斗篷的令牌?

  • 我正在尝试使用pact来验证spring boot微服务。我已经从consumer生成了pact文件,并在provider端使用pact Broker验证了它。 我有另一个用例,在根据实际的服务响应验证pact文件之前,我需要执行一些代码。我读过关于状态改变URL和状态改变与闭包来实现它,但没有得到一个如何实现这一点的例子。有人能帮忙吗? 如果这个客户不存在,那么我将需要通过读取pact文件中的更

  • 我应该使用RESTful@GET请求来登录我的用户吗?有人能推荐一个更好的方法来做用户登录吗?

  • 在我的Angular 2应用程序中,我希望允许用户通过电子邮件/密码、谷歌和Facebook提供商进行连接。 在第一次登录时,我了解到一个用户条目是在firebase数据库中创建的。例如。如果用户使用另一个提供程序登录,我理解firebase将阻止此操作,特别是如果电子邮件已经被使用并且在规则中设置为unique。 所以我的问题是:如果我们检测到电子邮件是相同的,那么我们如何能够自动的,对用户来说

  • 我正在尝试配置TomEE(带有Java EE的Tomcat)以使用AMQP Wire协议连接到外部代理(Azure Service Bus)。缺省情况下,JMS提供程序似乎是ActiveMQ。根据文档,ActiveMQ确实支持AMQP协议。我的目标是使用ActiveMQ作为TomEE提供的JMS提供程序。但是,部署基本ear文件时,会出现以下错误: 有人将ActiveMQ与AMQP一起使用吗?或者

  • 我正在开发一个聊天应用程序,在该应用程序中,我必须从edittext设置登录Id密码凭据,根据响应,我必须进入更多屏幕。 当我静态使用凭据时,我从网络服务获得响应 但当我从EditText获取凭证时,它现在给了我适当的回应。