iOS Swift,AWS Cognito用户池,无法刷新访问令牌

时间:2018-03-07 00:06:32

标签: swift swift3 aws-cognito

查看类似的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
}

2 个答案:

答案 0 :(得分:1)

document.getElementById("root").appendChild(temp) 返回AWSTask。

您必须访问回调中的getSession()

以下代码适用于我:

tokenString

答案 1 :(得分:0)

您不应该缓存sessiontokenString。如果这样做,则AWS库无法执行代码来知道何时到期或何时刷新。从我读到的内容(以及我们对Android和iOS Cognito SDK所做的事情)来看,正确的方法是每次需要令牌时都调用getSession()。在后台,AWS库将立即为您返回一个缓存的会话,或者进行刷新会话的工作(也就是获取新令牌)。

如果您不是从主线程调用getSession(),则可以阻止从getSession()返回的AWSTask。否则,这将是不容易实现的,因为您和稍后将完成的AWSTask。

您可以检查会话的expirationTime属性,如果会话没有过期,请使用其中的令牌。但是,您仍然要处理会话过期且AWS库需要进行异步工作以刷新的情况。