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

3

我已经在我的Django项目中集成了allauth,用户可以通过Facebook账户登录。现在他们的令牌已经存储在数据库中,但当我使用它们从Facebook获取用户数据时,会出现一个“令牌已过期”的错误。

因此,我想要询问以下问题:

  1. Django-allauth是否可以更新用户登录后的令牌?
  2. 如果它可以/这样做,那么如何获得一个新的令牌,而不需要让我的用户通过登录流程(也许是伪造一个登录流程)?

关于2的附注: 我在Facebook文档中搜索到了一种通过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脚本中获取数据,所以这对我来说行不通。

一个过期的令牌没有任何用处。如果您可以使用它来获取有效的令牌,那么它就会失去所有过期的目的。 - user2357112
@user2357112:这就是我所问的。有没有办法获取新的令牌? - Dhiraj Thakur
如何在不让用户通过登录流程的情况下获取新的令牌 - 不可能! - Sahil Mittal
@Shadowfax:有什么解决办法吗? - Dhiraj Thakur
@Shadowfax:我有一个cron脚本来获取个人资料数据,因此我需要访问令牌。我每天运行一次脚本,所以当脚本运行时,所有令牌都已过期。 - Dhiraj Thakur
显示剩余2条评论
1个回答

1
一个典型的用户访问令牌有效期为2小时,您可以将其延长至60天。但是,您无法在没有用户交互的情况下刷新令牌。否则,限制有效性就毫无意义了。这是一个重要的特性,如果用户几天不使用应用程序,则应用程序不应再使用他的令牌。
因此,您不能使用cron作业刷新令牌。用户必须刷新它(例如,在JavaScript SDK中使用FB.getLoginStatus)。
有关访问令牌的更多信息:https://developers.facebook.com/docs/facebook-login/access-tokens/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接