我正在使用带有Codeigniter的PHP SDK实现Facebook登录。我获得Facebook登录弹出窗口,点击登录,但我无法检索用户的ID - 它总是返回0.
我已将facebook.php和base_facebook.php文件放在我的库文件中,并在教程here之后将其作为库包含在Codeigniter中。
谁能告诉我他们的想法是什么?我使用以下代码 -
查看 - Facebook登录按钮
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $this->config->item('facebook_app_id'); ?>',
status : true,
cookie : true,
xfbml : true,
oauth : true,
});
FB.Event.subscribe('auth.login', function() {
window.location='<?php echo base_url(); ?>auth_other/fb_signin/';
});
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
</script>
<div class="fb-login-button">Login with Facebook</div>
控制器 - auth_other / fb_signin
function fb_signin()
{
$fb_user = null;
$fb_config = array(
'appId' => $this->config->item('facebook_app_id'),
'secret' => $this->config->item('facebook_app_secret')
);
$this->load->library('facebook',$fb_config);
$fb_user = $this->facebook->getUser();
echo $fb_user;
答案 0 :(得分:1)
我遇到了类似的问题,这是可以帮助你的解决方案。
$facebook = new Facebook(array(
'appId' => 'xxxx',
'secret' => 'xxxxx',
"redirect_uri" => "set the uri to point to the same page"
));
$user = $facebook->getUser();
if($user)
{
//your task
} else {
header('location:'. $facebook->getLoginUrl());
}
$user = $facebook->getUser();
if($user)
{
//your task
} else {
header('location:'. $facebook->getLoginUrl());
}
答案 1 :(得分:0)
遇到getUser()返回0的情况,当它真的不应该时,应用程序仍然是沙箱。事实证明用户没有接受申请开发者的请求。
答案 2 :(得分:0)
我遇到过类似的问题。我使用了一个示例项目,并且无法弄清楚为什么它一直返回0.尝试了几乎所有相关链接,但没有解决它。
解决方案是在示例项目中更新Facebook的SDK文件。 简单而容易错过,
答案 3 :(得分:0)
我有同样的问题,经过很长一段时间试图找出问题所在, 我发现你需要访问令牌来获取用户ID。 要从signed_request获取访问令牌,用户必须首先授权(获取权限)您的应用程序。 我希望这会有所帮助
答案 4 :(得分:-1)
如果App域是真实域但站点url是localhost,则getUser函数返回0