Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 on rails Rails omniauth facebook未解决的问题_Ruby On Rails_Facebook Javascript Sdk_Omniauth - Fatal编程技术网

Ruby on rails Rails omniauth facebook未解决的问题

Ruby on rails Rails omniauth facebook未解决的问题,ruby-on-rails,facebook-javascript-sdk,omniauth,Ruby On Rails,Facebook Javascript Sdk,Omniauth,当前的omniauth facebook似乎有一些问题,我想知道是否有人对此有答案 第一个问题是无效凭据问题。由于此问题,我无法使用客户端授权登录到我的应用程序。然而,这可以通过将facebook omniauth降级到1.4.0版本来解决。) 但是,现在我遇到了第二个问题,NoAuthorizationCodeError,错误消息如下: OmniAuth Strategies Facebook NoAuthorizationCodeError (must pass either a `cod

当前的omniauth facebook似乎有一些问题,我想知道是否有人对此有答案

第一个问题是无效凭据问题。由于此问题,我无法使用客户端授权登录到我的应用程序。然而,这可以通过将facebook omniauth降级到1.4.0版本来解决。)

但是,现在我遇到了第二个问题,NoAuthorizationCodeError,错误消息如下:

OmniAuth Strategies Facebook NoAuthorizationCodeError 
(must pass either a `code` parameter or a signed request 
(via `signed_request` parameter):
这是在中提出的,但接受的答案建议实际再次升级到1.4.1版本,这将使以前的无效凭据问题再次发生。所以这不是我的选择

当我试图通过internet explorer在Facebook iFrame(从应用程序中心搜索我的应用程序)内登录我的应用程序时,会发生
NoAuthorizationCodeError
。在chrome或firefox上一切正常。也有一个精确定位这个问题的方法,但还没有人找到答案。我也尝试过降级到omniauth facebook 1.3.0版本,但没有什么不同。我还尝试传入
signed_请求
参数,如下所示:

window.location = '/auth/facebook/callback', 
{ signed_request: response.authResponse.signedRequest }
但是,这没有任何区别(在IE上,错误仍然存在),我不确定这是否是将代码作为参数传递的正确方法(如何检查?)

我想我的设置没有问题。我真的很感激在这件事上能得到任何帮助

更新:

我升级到1.4.1版本时没有出现无效凭据问题,但是当我通过Internet Explorer访问Facebook内部的应用程序时,仍然没有发生AuthorizationCodeError。检查我的Github

更新:

我降级到1.4.0版本,并添加了signedRequest参数

<script>
function login() {
  FB.login(function(response) {
    if (response.authResponse) {
      window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest })
    } 
  }, {scope: 'email,publish_stream,publish_actions'});
}
</script>
同样,在任何其他环境中,授权都可以在所有浏览器中完美工作。只有当我尝试通过Internet Explorer登录Facebook时,才会出现此问题

我的环境:omniauth facebook 1.4.0、omniauth 1.1.1、oauth2 0.8.0、Rails 3.2.11


我故意将omniauth facebook从1.4.1降级到1.4.0,因为最新版本中存在无效凭据错误。

fastcatch
在SO post中指出

。。。OmniAuth策略[…],如果遇到问题,请调用方法fail!并传入一个描述问题的符号,如:无效的\u凭据及其遇到的异常。失败!方法最终调用OmniAuth.config.on_failure并在机架环境中传递(在执行一些其他操作后,例如将异常粘贴到环境中…

使用OmniAuth(1.1.3)、oauth2(0.8.1)和OmniAuth facebook(1.4.1)


这些问题不会出现任何错误,因为您仅在使用iframe时在Internet Explorer中看到问题,可能是P3P问题

看 以及:

Internet Explorer为IFRAME页面提供较低级别的信任(即称之为“第三方”内容)。如果IFRAME中的页面没有隐私策略,则其Cookie将被阻止(由状态栏中的眼睛图标指示,当您单击它时,它将向您显示被阻止的URL列表)。 ... 在这种情况下,当cookie被阻止时,不会发送会话标识符,并且目标脚本会抛出“会话未找到”错误。
尝试添加gem,看看是否有帮助!

谢谢@saurabh,但这并不能完全解决所述问题。我已经知道这些信息。在我将omniauth facebook gem降级为1.4.0版后,我也面临着同样的问题,问题已经解决。
2013-02-22T01:10:40+00:00 app[web.1]: Started GET "/auth/facebook/callback?signed_request=LONGSTRING" for 200.1.102.103 at 2013-02-22 01:10:40 +0000
2013-02-22T01:10:40+00:00 app[web.1]: (facebook) Callback phase initiated.
2013-02-22T01:10:40+00:00 app[web.1]: Processing by SessionsController#create_facebook as HTML
2013-02-22T01:10:40+00:00 app[web.1]:   Parameters: {"signed_request"=>"LONGSTRING", "provider"=>"facebook"}
2013-02-22T01:10:40+00:00 app[web.1]:   User Load (1.6ms)  SELECT "users".* FROM "users" WHERE "users"."provider" = 'facebook' AND "users"."uid" = 'MYUID' LIMIT 1
2013-02-22T01:10:40+00:00 app[web.1]:    (0.8ms)  BEGIN
2013-02-22T01:10:40+00:00 app[web.1]:   User Exists (1.0ms)  SELECT 1 AS one FROM "users" WHERE ("users"."name" = 'MYNAME' AND "users"."id" != 3) LIMIT 1
2013-02-22T01:10:40+00:00 app[web.1]:    (0.9ms)  COMMIT
2013-02-22T01:10:40+00:00 app[web.1]: Redirected to http://MYAPP.COM
2013-02-22T01:10:40+00:00 app[web.1]: Completed 302 Found in 10ms (ActiveRecord: 4.2ms)