如何从django-allauth中的陈旧令牌生成新的访问令牌?

时间:2013-08-23 08:34:47

标签: python django facebook django-allauth

我已经在我的django项目中集成了allauth,用户可以通过他们的Facebook帐户登录。现在他们的令牌在数据库中可用,但当我使用它们从facebook获取用户数据时,会导致令牌已过期的错误。 所以我想问一下:

  1. 当用户登录我的网站时,django-allauth会更新令牌吗?
  2. 如果它可以/这样做,那么如何在没有让我的用户通过登录流程的情况下获得新的令牌(可能是假的登录流程)?
  3. 关于2的旁注: 我在facebook docs上搜索了这个,他们提供了一种通过GET调用来刷新令牌的方法:

    GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={short-lived-token} 
    

    但这必须在令牌过期之前完成,而我在cron脚本中使用令牌来获取数据,因此这对我不起作用。

1 个答案:

答案 0 :(得分:1)

典型的用户访问令牌有效期为2小时,您可以将其延长至60天。但是如果没有用户交互,您无法刷新令牌。否则,限制有效性是没有意义的。这是一项重要功能,如果用户在某些日子里没有使用某个应用,该应用就不应该再使用他的令牌了。

因此,您无法使用cron作业刷新令牌。用户必须刷新它(例如,JavaScript SDK中的FB.getLoginStatus)。

有关访问令牌的更多信息:https://developers.facebook.com/docs/facebook-login/access-tokens/