最近我上传了一段代码到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。我找不到如何解决它,我看到很多人在登录时遇到了几个问题。
我期待你能帮助我。 提前谢谢。
答案 0 :(得分:4)
我的实际错误是$ facebook-&gt; getUser()返回0因为应用程序未经过身份验证且应用程序未经过身份验证,因为我将代码从主机移动到另一个域中的另一个但我忘了更改http://developers.facebook.com中的应用程序配置。
现在,该应用程序自动获取登录信息。 谢谢大家!
答案 1 :(得分:1)
登录窗口快速消失是Facebook检查您是否需要授予应用程序权限。它几乎立即关闭,因为您已经登录并通过Facebook授权。
我不熟悉Heroku / Facebook集成,但我认为$idFacebook
问题与无效配置有关。
答案 2 :(得分: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时,它会要求您注销。所以当你点击退出时,它会再次要求你登录并且就是这样。
希望它有所帮助。
答案 3 :(得分: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以获取完整的文档。