是否应在每次用户登录时生成oAuth中的访问令牌?

时间:2011-10-07 04:27:42

标签: php api twitter oauth

我已经在php中实现了oAuth(目前用于推特),正如我在几个教程中读到的那样,你应该将访问令牌存储在db中以备将来使用。但是,我不知道您是否知道您是否为特定用户存储了访问令牌,以决定是否应将其从数据库中取出或重新生成它。这是描述我的问题的流程:

首次登录用户:

  • 获取请求令牌
  • 将用户发送到提供商的身份验证页面
  • 用户使用oauth标记和oauth验证程序返回回调网址
  • 获取访问令牌
  • 在db上保存访问令牌/ user_id / screen_name以供将来使用

10分钟后用户返回:

    如果用户未注销,
  • 访问令牌仍在服务器会话变量中。否则,重复一遍。

用户1个月后返回:

  • 获取请求令牌
  • 将用户发送到提供商的身份验证页面
  • 用户使用oauth标记和oauth验证程序返回回调网址
  • (此时我只有oauth令牌,我如何知道用户之前是否已使用twitter登录并从数据库中提取其访问令牌?)
  • 如果是用户的第一个登录名,则生成访问令牌。

oAuth的主要工作流程很明确,但是不清楚如何处理返回用户以及应该存储哪些数据。

百万感谢!

2 个答案:

答案 0 :(得分:17)

您不应为每次访问重新生成令牌。只有在它过期时才生成它。我使用OAuth构建了twitter应用程序。在这里我的流程:

  1. 当用户登录时,我会检查他们是否在DB中有令牌

    1.1。如果它不存在,请对它们进行身份验证,然后存储并使用生成的令牌

    1.2。如果它存在,请使用它。

    1.2.1。如果twitter没有抱怨,那么令牌仍然有效,请使用它。

    1.2.2。如果Twitter抱怨,则令牌已过期。返回1.1。

    1.2.3。如果经过x重试后Twitter仍然抱怨。有问题,请通知管理员!

  2. 以下是图解说明:

    enter image description here

答案 1 :(得分:0)

我认为这里唯一缺少的是在用户第一次加入系统时生成一个随机(长且不可取的)用户ID,并永久存储它。通过这种方式,您可以判断谁正在采取行动