Python:检查facebook用户访问令牌是否已过期

时间:2012-10-08 15:40:18

标签: python facebook facebook-graph-api

我正在使用facepy facebook api从我的Facebook帐户中获取邮件。我使用API​​让自己long live access token有效期为60天。现在,在我查询消息之前的程序中,我想检查我的令牌是否已经过期,如果过期则取一个新令牌。

我正在使用get_extended_access_token,它还返回一个描述令牌到期时间的日期时间实例。现在我认为使用get_extended_access_token并不是一种有效的方式,因为每次我要查询新消息时它都会获取access token(我知道它和以前一样)但我认为这是开销。

所以,我用Google搜索,发现我们也可以使用

https://graph.facebook.com/debug_token?input_token=INPUT_TOKEN&access_token=ACCESS_TOKEN

debug the token

所以我提供了long live access token而不是INPUT_TOKEN and ACCESS_TOKEN,它给了我一个json回复:

{
   "data": {
      "app_id": XXXXX,
      "is_valid": true,
      "application": "YYYYY",
      "user_id": ZZZZZZ,
      "issued_at": 1349261684,
      "expires_at": 1354445684,
      "scopes": [
         "read_mailbox"
      ]
   }
}

现在,如果您查看expires_at字段,它会显示1354445684 seconds,当我尝试将其转换为天/月时,它会给我15676 days,当我在图表中检查相同的标记时资源管理器使用它显示的调试选项

expires_at: 1354445684(about 2 months)

现在,我不明白的是1354445684如何等同于2 months以及如何在python中实现这一点。

还要评论哪个更好的方法来检查其是否已过期?{/ 1}}

2 个答案:

答案 0 :(得分:6)

  

现在,如果您查看expires_at字段,它显示1354445684秒,当我尝试将其转换为天/月时,它给了我15676天

然后你已经完成(或理解)了错误。

expires_at 1354445684是一个Unix时间戳,等于Sun, 02 Dec 2012 10:54:44 +0000翻译成人类可读的日期。

这距离issued_at时间戳1349261684,a.k.a。Wed, 03 Oct 2012 10:54:44 +0000

差不多两个月了

答案 1 :(得分:2)

我建议您依靠异常来验证令牌是否有效,而不是单独请求保证令牌:

from facepy import GraphAPI

graph = GraphAPI(token)

try:
    graph.get('me')
except GraphAPI.OAuthError:
    # Redirect the user to renew his or her token