0

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

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

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

但是,当我通过销毁他们的会话来注销用户并且他们重​​复身份验证过程时,第 3 方提供商将用户视为新授权的应用程序,而将旧的授权应用程序留在后面。我怎样才能解决这个问题?最好不要在注销时破坏用户的会话,而是存储用户的登录状态?Discogs 不提供取消身份验证的方法。

此外,一旦用户登录,就有一些配置要针对用户设置。我应该为此创建一个专用的数据库表或等效的,还是将其存储在会话中就足够了?似乎专用的用户表可能是多余的,因为我依靠用户的会话 ID 来识别它们。

4

1 回答 1

1

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

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

您的流程可能是这样的:

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

唯一的用户 ID 可以是任何东西,你猜对了,唯一的。可能是一个实际的 ID、用户名或电子邮件地址 - 我对 Discogs 不熟悉,但我相信你可以弄清楚以及如何获得它。

于 2018-03-07T15:33:08.187 回答