Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何通过远程代理进行facebook身份验证_Ruby_Facebook_Proxy_Sinatra - Fatal编程技术网

Ruby 如何通过远程代理进行facebook身份验证

Ruby 如何通过远程代理进行facebook身份验证,ruby,facebook,proxy,sinatra,Ruby,Facebook,Proxy,Sinatra,假设我有一个带有Sinatra REST API的应用程序。在我的应用程序中,我有一个设计师在前端工作。我没有为他设置本地后端,而是按如下方式编辑他的主机文件: 127.0.0.1 local.example.com ProxyPass /api http://example.com:4567 ProxyPassReverse /api http://example.com:4567 以及他的httpd-vhosts.conf,如下所示: 127.0.0.1 lo

假设我有一个带有Sinatra REST API的应用程序。在我的应用程序中,我有一个设计师在前端工作。我没有为他设置本地后端,而是按如下方式编辑他的主机文件:

127.0.0.1        local.example.com
ProxyPass /api http://example.com:4567
ProxyPassReverse /api http://example.com:4567
以及他的httpd-vhosts.conf,如下所示:

127.0.0.1        local.example.com
ProxyPass /api http://example.com:4567
ProxyPassReverse /api http://example.com:4567
因此,API调用被代理到远程主机。然后,我在apache中为local.example.com创建一个vhost,该vhost映射到我们前端repo所在的本地目录。这使我可以给他一个远程后端和一个本地前端

之所以使用子域,是因为我们使用Facebook身份验证,它对auth有限制性的域策略。我们可以成功地在facebook上验证用户并将其重定向回应用程序,但在尝试获取访问令牌时,会收到400条响应,其中包含以下消息:

{"error"=>{"message"=>"Missing client_id parameter.", "type"=>"OAuthException", "code"=>101}}
我相信client_id的设置是正确的,因为它是在rack:oauth:client对象中正确设置的,并且流程是相同的,只有当域不同时才会失败。我唯一的想法是facebook可能不喜欢用户从local.example.com进行身份验证,而访问令牌是从example.com请求的,但我的理解是facebook将在所有子域上进行身份验证。我还将local.example.com列入了我的应用程序的白名单


对如何实现这一目标有何见解或建议?提前感谢。

事实证明这不是域问题,而是来自nov的开源fb api fb_graph默认使用基本身份验证,您需要在获取访问令牌时将身份验证设置为除:basic之外的其他值才能解决此错误