我正在尝试刷新用户令牌,我在一个“子”应用程序中执行此操作,该应用程序只能访问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
答案 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
文件中的几乎所有其他内容)的原因是由于nonnull
和NS_ASSUME_NONNULL_BEGIN
宏。对于NS_ASSUME_NONNULL_END
,此非null假设无效。