刷新令牌AWS Cognito用户池,代码块甚至无法运行

时间:2017-09-14 02:38:55

标签: ios swift amazon-web-services aws-sdk amazon-cognito

我正在尝试刷新用户令牌,我在一个“子”应用程序中执行此操作,该应用程序只能访问idToken,accessToken,refreshToken以及用户的密码信息。它是沙盒的,无法与主应用程序通信。

我尝试使用以下代码来运行initiateAuth

let authParams = [
    "REFRESH_TOKEN": user.refreshToken, 
    "SECRET_HASH": config.getClientSecret()
]

let provider = AWSCognitoIdentityProvider(forKey: config.getClientSecret())

let req = AWSCognitoIdentityProviderInitiateAuthRequest()
req?.authFlow = AWSCognitoIdentityProviderAuthFlowType.refreshToken
req?.clientId = config.getClientId()
req?.authParameters = authParams

provider.initiateAuth(req!).continueWith() {
    resp in
    print("I'm not running")
    if (resp != nil) {
        print(resp.error.debugDescription)
    } else {
        print(resp.result.debugDescription)
    }
    return nil
}

令人震惊的是,continueWith代码块甚至根本没有运行,并且没有调用print语句“我没有运行”。我不知道该怎么做,因为这似乎是他们在SDK中做的事情:https://github.com/aws/aws-sdk-ios/blob/master/AWSCognitoIdentityProvider/AWSCognitoIdentityUser.m#L173

1 个答案:

答案 0 :(得分:1)

@behrooziAWS的评论为我解决了同一问题。

具体地说,即使XCode的快速帮助中记录了AWSCognitoIdentityProvider(forKey:)的初始化程序为:

+ (nonnull instancetype)CognitoIdentityProviderForKey:(nonnull NSString *)key;

如果找不到所提供的nil的{​​{1}},它可以(并且将)返回CognitoIdentityProvider。发生这种情况的一种情况是,从未为提供的key调用AWSCognitoIdentityProvider.register(with:forKey:)

key生成编译器警告它将始终为if(provider != nil)时,更令人困惑。我不得不使用以下代码片段来使一切正常运行而没有警告:

true

P.S。我希望在Swift + ObjC方面有更多经验的人可以评论为什么初始化器出现或被翻译为 let provider: AWSCognitoIdentityProvider? = AWSCognitoIdentityProvider( forKey: config.getClientSecret()) guard provider != nil else { fatalError("AWSCognitoIdentityProvider not registered!") } ,即使Objective C源代码只有nonnull instancetype 编辑:自动使用instancetype注释此初始化程序(以及AWSCognitoIdentityProvider/AWSCognitoIdentityUser.h文件中的几乎所有其他内容)的原因是由于nonnullNS_ASSUME_NONNULL_BEGIN宏。对于NS_ASSUME_NONNULL_END,此非null假设无效。