查看类似的SO问题,这些问题无法解决问题。
我在iOS应用中使用AWS Cognito用户池。我们能够成功创建并登录用户。但是,在关于Hr之后访问令牌不可用,我从AWS Cognito文档中了解到iOS SDK会自动刷新(also mentioned here)并在令牌不可用时获取令牌,但是我看不到这种行为。以下代码显示了我如何尝试获取访问令牌。
使用iOS SDK AWSCognitoIdentityProvider 2.6.7
请告知我如何解决问题。
let mySession = self.pool.currentUser()?.getSession()
guard let accessToken = mySession?.result?.accessToken?.tokenString as? String else {
print("Unable to obtain access token")
self.handleSignOut() // Signing out the user since there is no access token
return
}
答案 0 :(得分:1)
document.getElementById("root").appendChild(temp)
返回AWSTask。
您必须访问回调中的getSession()
。
以下代码适用于我:
tokenString
答案 1 :(得分:0)
您不应该缓存session
或tokenString
。如果这样做,则AWS库无法执行代码来知道何时到期或何时刷新。从我读到的内容(以及我们对Android和iOS Cognito SDK所做的事情)来看,正确的方法是每次需要令牌时都调用getSession()
。在后台,AWS库将立即为您返回一个缓存的会话,或者进行刷新会话的工作(也就是获取新令牌)。
如果您不是从主线程调用getSession()
,则可以阻止从getSession()
返回的AWSTask。否则,这将是不容易实现的,因为您和稍后将完成的AWSTask。
您可以检查会话的expirationTime
属性,如果会话没有过期,请使用其中的令牌。但是,您仍然要处理会话过期且AWS库需要进行异步工作以刷新的情况。