3

最近我上传了一段代码到phpfog,我遇到了一个本地没有发生的问题:

当页面加载时,它会尝试获取应该设置的 $idFacebook:

$idFacebook = $facebook->getUser();
if ($idFacebook) { ... }

我登录到 Facebook,但是,条件失败并出现登录按钮:

<div class="fb-login-button" data-scope="user_likes,user_photos"></div>

另一个问题是,当我按下按钮时,似乎出现了登录窗口,但它很快就自动关闭了。

我的代码与 Heroku 在您创建 Facebook 应用程序时提供的代码基本相同。存储库是这个:https ://github.com/heroku/facebook-template-php 。我找不到解决方法,而且我看到很多人在使用 facebook 登录时遇到了几个问题。

我期待着你能帮助我。提前致谢。

4

4 回答 4

4

我的实际错误是 $facebook->getUser() 返回 0 因为应用程序未通过身份验证,并且应用程序未通过身份验证,因为我将代码从主机移动到不同域中的另一个主机并且我忘记更改应用程序配置http://developers.facebook.com

现在,该应用程序自动获取登录信息。谢谢大家!

于 2012-07-25T23:42:47.117 回答
1

快速消失的登录窗口是 Facebook 检查您是否需要授予应用程序权限。它几乎立即关闭,因为您已经登录并获得 Facebook 授权。

我不熟悉 Heroku / Facebook 集成,但我认为$idFacebook问题与无效配置有关。

于 2012-07-25T11:03:36.997 回答
1

登录窗口很快就消失了,因为您可能在同一浏览器中登录了 facebook。

我不熟悉 Heroku,但我已经在 Zend Framework - php 中克服了这个问题。我使用 javascript-sdk 进行登录和注销。你可以参考这个链接。

http://developers.facebook.com/blog/post/2011/07/21/updated-javascript-sdk-and-oauth-2-0-roadmap/

因此,当您在代码中实现此示例时,当您在同一浏览器中登录 FB 时,它会要求您注销。因此,当您单击注销时,它会再次要求您登录,仅此而已。

希望能帮助到你。

于 2012-07-25T11:17:21.543 回答
0

为避免这种情况,您必须使用 FB.getLoginStatus 稍微更改 facebook 脚本的行为。它会检查用户是否已经登录 Facebook,以及他是否已经授权了您的应用程序。

FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        window.location = //redirect to page with logged user (you have the response token in response)
    } else {
      //Show the login popup
      FB.login(function(response) {
        if (response.authResponse) {
          window.location = //redirect to location after correct login
        }
      }, { scope: '<scopes>', state: '<state>' });
    }
  });

这样,如果用户“已连接”(已登录并获得应用授权),您将不会调用 FB.login 方法,因此登录窗口不会闪烁。在任何其他情况下,它将显示登录窗口,这是预期的结果。

检查https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus以获取完整文档。

于 2014-09-04T15:45:02.647 回答