【问题标题】:Identifying/Managing users based on session ID (Mapping between Session ID to User ID to User Data)基于会话 ID 识别/管理用户(会话 ID 到用户 ID 到用户数据之间的映射)
【发布时间】:2012-11-03 01:14:06
【问题描述】:

我编写了一个通过 Facebook 连接 (o-Auth) 对用户进行身份验证的网络应用程序。 用户通过身份验证后,我有一个 facebook 令牌。 使用这个令牌,我向 Facebook 发送请求以获取其基本用户信息。 此时我有了用户唯一的 Facebook id,我知道它是谁。

  1. 我应该如何在用户、令牌和数据库中的数据之间建立联系? 现在我的架构非常简单:facebook_id 是主键,还有一些其他列包含令牌和用户数据。这是正确的做法吗?

  2. 什么时候需要在用户请求上设置一个唯一的 SESSION_ID (cookie)?认证后呢? 我对这部分(以及一般的会话管理)感到困惑。当我在会话上设置属性时,浏览器是否会记住它并在每个请求中将其发送到我的服务器?跨所有页面?

  3. 最重要的问题是,我如何在 SESSION ID 和用户之间进行映射?一旦我在他的请求上设置了会话 ID,我需要在每个请求中弄清楚它是谁。最好的方法是什么?

【问题讨论】:

    标签: facebook session cookies oauth session-cookies


    【解决方案1】:
    1. 没关系,您真正想做的只是能够将特定 Facebook 用户 ID 与您的网络应用程序创建的或在您的网络应用程序中创建的数据匹配,这些数据不是来自 Graph API。
    2. 在您完成登录流程的那一刻(当您收到访问令牌时)。当您设置会话时,浏览器将记住其中的键值对,直到会话被清除。因此,您希望您的代码能够将使用浏览器的人与数据库中的特定用户相关联(或者如果他们没有会话,则不能)。因此,无论您使用什么会话值,您还需要将其与用户 ID 一起存储在数据库中。
    3. 见上文。

    老实说,最简单的方法就是使用 Facebook Javascript SDK。这将通过 cookie 自动处理所有访问令牌检索和用户持久性,而无需您为其编写代码。最终,这意味着您需要做的就是将 Facebook 用户 ID 与应用程序生成的内容一起存储在数据库中,而无需担心存储访问令牌或会话变量。这里有一个简单的分步指南: https://developers.facebook.com/docs/howtos/login/getting-started/
    (在第 5 步中,您将收到用户 ID,您可以从此处对服务器端代码进行 AJAX 调用以将其存储在您的数据库中)

    【讨论】:

    • 感谢您的宝贵回答。我正在做服务器端登录,所以有点棘手。由于服务器代表用户执行所有对 facebook 的调用。只是不确定如何维护会话,但您的回答有所帮助。
    • 这里有一个服务器端登录流程指南developers.facebook.com/docs/howtos/login/server-side-login 它使用 PHP,但它是一个通用过程,因此您可以轻松地将这些步骤调整为您自己的语言。此外,该文档中的第 6 步可能正是您要查找的内容。
    • 我实现了这个流程(来自您链接的指南,在 java 中),效果很好。问题是如何在所有流程结束后识别用户。我需要为他设置一个会话标识符,以便他在每次请求时将其发送给我。不确定我需要在什么时候设置它。
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2014-07-07
    相关资源
    最近更新 更多