我正在制作一个允许支持facebook的服务器软件模块。 问题出在回调URL上。如果一个客户端启动授权进程,则另一个客户端同时或在第一个用户完成之前启动进程。我怎么能检查用户先完成了什么?
我需要一种方法来检查我得到的客户端回调。一种解决方案是将其他寄存器锁定,直到第一个完成,但我不想这样做。还有另外一种方法吗?我曾考虑在回调结束时加入?client=clientid
,但我听说facebook只允许在Facebook上的应用程序中指定的确切网址。
更新 它无法将client =“clientid”添加到回调中。还有其他想法吗?
答案 0 :(得分:2)
经过一些搜索后,我发现facebook会允许参数:state。 (感谢@jacob https://stackoverflow.com/a/6470835/1104307)
所以我刚刚做了?state = clientId。
对于任何使用scribe的人来说,代码都是这样的:
service.getAuthorizationUrl(null) + "&state=" + clientId;
答案 1 :(得分:1)
我认为添加和客户端= clientID等GET参数没有问题。 Facebook会将您重定向到您指定的URL,并使用REQUEST参数检查完成请求的人员。如果您将网址指定为http://yoursite.com并将重定向传递到http://some-sub-domain.yoursite.com或完全不同的位置,则会出现此问题。
答案 2 :(得分:1)
如果您使用的是服务器端流程,则oauth 2流程将为:
我的建议是在步骤1中设置会话cookie,同时将此会话ID存储在您的服务器上。然后会话cookie将自动发送到步骤2中的回调URL,您可以通过这种方式识别数据库中的会话。
这适用于所有服务提供商(google,twitter,linkedin等),是保持会话连续性的首选方式。