我在我的 django 项目中集成了 allauth,用户可以通过他们的 facebook 帐户登录。现在他们的 token 在数据库中可用,但是当我使用它们从 facebook 获取用户数据时,会导致 token 已过期的错误。 那么我想问的是:
- 当用户登录我的网站时,django-allauth 是否/可以更新 token ?
- 如果它可以/这样做,那么我如何在不让我的用户通过登录流程(可能是伪造的登录流程)的情况下获得新 token ?
关于 2 的旁注: 我在 facebook 文档上搜索了这方面的内容,他们提供了一种通过 GET 调用刷新 token 的方法:
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
但这必须在 token 过期之前完成,因为我在 cron 脚本中使用 token 来获取数据,所以这对我不起作用。
请您参考如下方法:
典型的用户访问 token 有效期为 2 小时,您可以将其延长至 60 天。但是没有用户交互就无法刷新 token 。否则,限制有效性是没有意义的。这是一个重要的功能,如果用户几天不使用应用程序,应用程序应该不能再使用他的 token 。
因此,您无法使用 cron 作业刷新 token 。用户必须刷新它(例如,JavaScript SDK 中的 FB.getLoginStatus)。
有关访问 token 的更多信息:https://developers.facebook.com/docs/facebook-login/access-tokens/
