【问题标题】:Scribe - multiple callback simultaneouslyScribe - 同时进行多个回调
【发布时间】:2012-11-06 16:52:15
【问题描述】:

我正在为允许支持 facebook 的服务器软件制作一个模块。 问题在于回调 URL。如果一个客户端启动授权过程,那么另一个客户端会同时启动该过程,或者在第一个用户完成之前启动该过程。我如何检查哪个用户先完成了?

我需要一种方法来检查我收到的客户回调。一种解决方案是在第一个完成之前锁定其他注册,但我不想这样做。还有其他方法吗?我曾考虑在回调结束时包含?client=clientid,但我听说facebook 只允许在facebook 上的应用程序中指定的确切网址。

更新 将 client="clientid" 添加到回调中不起作用。还有其他想法吗?

【问题讨论】:

    标签: java facebook oauth callback scribe


    【解决方案1】:

    经过一番搜索后,我认为 facebook 将允许一个参数:状态。 (感谢@jacob https://stackoverflow.com/a/6470835/1104307

    所以我只是做了 ?state=clientId。

    对于任何使用 scribe 的人,代码如下:

    service.getAuthorizationUrl(null) + "&state=" + clientId;
    

    【讨论】:

      【解决方案2】:

      我认为添加和 GET 参数(如 client=clientID)没有问题。 Facebook 会将您重定向到您指定的 URL,并使用 REQUEST 参数您可以检查谁完成了请求。如果您将 URL 指定为 http://yoursite.com 并将重定向传递到 http://some-sub-domain.yoursite.com 或完全不同的位置,则会出现问题。

      【讨论】:

      • 所以我就这么做? .callback(callbackURL+"?client="+clientId)
      • 效果不佳..:{ "error":{ "message" : "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request", "type" : "OAuthException", "code" : 100 } }
      【解决方案3】:

      如果您使用的是服务器端流程,那么 oauth 2 流程将是:

      1. 将用户重定向到 facebook
      2. facebook 然后将用户重定向到您指定的回调
      3. 您的服务器使用 curl 之类的方法来获取访问令牌
      4. 您的服务器会执行更多 curl 操作以获取更多用户数据或更新用户数据

      我的建议是在步骤 1 中设置会话 cookie,并同时将此会话 ID 存储在您的服务器上。然后会话cookie会自动发送到第2步中的回调url,您可以通过这种方式识别数据库中的会话。

      这适用于所有服务提供商(google、twitter、linkedin 等),并且是保持会话连续性的首选方式。

      【讨论】:

      • 好的,但是我应该如何添加 sessionCookie?
      • 如果你使用php你可以使用setcookie函数,如果你使用javascript你可以使用document.cookie
      猜你喜欢
      • 2012-06-16
      • 2011-05-23
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2018-10-16
      相关资源
      最近更新 更多