Facebook登录后重定向

时间:2012-05-22 15:21:53

标签: facebook facebook-canvas facebook-javascript-sdk

我已经阅读了许多问题和答案,包括StackOverflow上的this one,但没有任何问题和答案。我对所见的所有回答的问题是“它在Safari中有效吗?”。

我试图让它与Safari一起使用。它适用于Chrome和Firefox。但在Safari中,登录屏幕只是冻结,我得到“不安全的JavaScript尝试访问带URL的帧”日志消息。

我有一个画布应用程序。我希望将用户登录并在他们登录后将其重定向到页面。我正在尝试在登录后直接重定向。我试过了

  1. window.top.location设置为facebook url(将一些数据作为all_data参数传递给已签名的请求)

  2. window.location设置为与我的应用具有相同域名的网址。

  3. 订阅auth.login事件并将重定向放在那里

  4. 将重定向放入回调中以登录

  5. 这些都不适用于Safari。我开始认为没有办法做到这一点。

    function doSomething()
    {
      FB.login(
        function(loginResponse)
        {
          if (loginResponse.authResponse)
          {
            window.top.location = "my url"
          }
        },
        {
          scope:"some,scope"
        }
      );
    }
    }
    

    作为对Nitzan Tomer的回应,以下是与Safari不兼容但与其他人合作的等效代码:

    function myThing()
    {
      FB.login(function(loginResponse)
        {
          if (loginResponse.authResponse)
          {
            FB.api('/me', function(response)
            { 
              window.location = "http://my_app.com?x=" + response.xyz;
            });
            }
        },
        {
          scope:"scopes"
        }
      );
    }
    

2 个答案:

答案 0 :(得分:0)

这不是解决问题的方法,而是更多的解决方案"虽然它仍然使用window.top.location但不是来自回调所以它可能会起作用(I&#39 ;我只是不确定回调的执行位置,因为它是执行回调的fb sdk,也许是从你iframe中的fb iframe调用它。)

您可以使用server side flow,而不是使用客户端身份验证。 整个过程发生在顶部窗口,因为它是使用window.top.location将用户重定向到oauth对话框开始的。

当流程结束时,Facebook会将用户重定向到您的redirect_uri,您只需将用户重定向到您想要的位置即可。

我希望这会有所帮助。 此外,您应该知道它在Facebook Platform Policies中声明:

  13。 Facebook上的Canvas或Page Tab应用程序的主要目的不是简单地将用户重定向到Facebook体验之外   并进入外部网站。

答案 1 :(得分:0)

事实证明问题在登录过程中稍早发生,并且回调从未被调用过。我确实在回调中设置了一个断点(没有被调用),但我认为断点可能由于某种原因不起作用(可能是因为它是在另一个窗口的上下文中执行)。

无论如何,问题是频道文件(文档似乎建议是可选的)无法正常工作,这导致Safari出现问题,而其他浏览器则没有。