1

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

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

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

4

3 回答 3

2

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

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

对于使用 scribe 的任何人,代码是这样的:

service.getAuthorizationUrl(null) + "&state=" + clientId;
于 2012-11-19T15:12:06.297 回答
1

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

于 2012-11-18T17:38:05.037 回答
1

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

  1. 将用户重定向到 Facebook
  2. 然后 facebook 将用户重定向到您指定的回调
  3. 您的服务器使用 curl 之类的东西来获取访问令牌
  4. 你的服务器做更多的卷曲来获取更多的用户数据或更新用户的数据

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

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

于 2012-11-19T06:28:37.520 回答