如何处理通过第三方OAuth1.0a进行身份验证的用户的登录状态?

时间:2018-03-07 14:35:21

标签: express oauth discogs-api

我正在使用Node.JS / Express.JS构建一个网站,允许用户使用第三方提供商登录(Discogs通过OAuth1.0a)。

我已成功实施身份验证过程,以便用户授予对其Discogs帐户的访问权限,并返回一个访问令牌以供将来的API调用使用。访问令牌不会过期。用户被Discogs归类为“经过身份验证的应用程序”。

目前我正在将会话令牌存储在会话中,即使用户重新启动浏览器,或者我的服务器重新启动,该会话仍然存在,因此用户仍然保持登录状态。很棒。

但是,当我通过销毁会话并且重复身份验证过程来登出用户时,第三方提供商将用户视为新授权的应用程序,将旧的授权应用程序留在后面。我怎么能绕过这个?最好是在注销时不销毁用户的会话,而是存储用户的登录状态? Discogs不提供解除身份验证的方法。

此外,还有一些配置要在用户登录后设置。我应该为此创建专用的数据库表还是等效的,还是将其存储在会话中?看起来专用的用户表可能是多余的,因为我依靠用户的会话ID来识别它们。

1 个答案:

答案 0 :(得分:1)

通常,您可能希望在自己的服务器上永久保存有关用户的一些信息,因此可能在数据库中。

在您的特定情况下,该数据库可能应该保存您从Discogs获得的某种唯一用户ID(出于安全原因不要保存访问令牌),您可以在后续登录时使用这些ID来识别哪些访问令牌属于给同一个用户。

您的流程可能是这样的:

  • 用户首次通过Discogs登录,获得访问令牌,将其放入会话
  • 您会以某种方式找出唯一的用户ID,将其与您可能需要的任何其他用户信息一起保存到您的数据库中
  • 您也将该ID放入会话中
  • 用户注销,您销毁会话,但保留数据库中的信息
  • 用户再次通过Discogs登录,您将获得一个不同的访问令牌,将其放入会话
  • 您找出唯一的用户ID,它与您的数据库中的ID匹配,因此您将该ID写入您的会话 - 现在您可以将用户视为同一用户,只需使用不同的访问令牌

唯一的用户ID可以是您猜对了的唯一用户ID。可能是一个真实的ID,用户名或电子邮件地址 - 我不熟悉Discogs,但我确信你可以解决一些问题以及如何获取它。