Php 授权后,Facebook重定向到我的网站,但未设置用户ID
用户访问我的应用程序的画布页面,该页面指示他们授权应用程序。然后将它们重定向到我的网站,在那里我使用PHPSDK查找有关用户的信息 不幸的是,用户ID在从Facebook重定向后返回0Php 授权后,Facebook重定向到我的网站,但未设置用户ID,php,facebook,sdk,authorization,Php,Facebook,Sdk,Authorization,用户访问我的应用程序的画布页面,该页面指示他们授权应用程序。然后将它们重定向到我的网站,在那里我使用PHPSDK查找有关用户的信息 不幸的是,用户ID在从Facebook重定向后返回0 $fb_user = $facebook->getUser(); 这仅在授权后立即发生。如果用户导航到“我的网站”上的另一个页面,或重新加载该页面,则返回正确的UID,并且一切正常 重定向会在Facebook完成授权之前发生吗?Facebook是否在重定向中发送用户ID?(可以配置吗?我们得到了这样的信息
$fb_user = $facebook->getUser();
这仅在授权后立即发生。如果用户导航到“我的网站”上的另一个页面,或重新加载该页面,则返回正确的UID,并且一切正常
重定向会在Facebook完成授权之前发生吗?Facebook是否在重定向中发送用户ID?(可以配置吗?我们得到了这样的信息,授权回调后的第一页要么没有用户,要么没有烫发,要么两者都没有。应作为错误记录此问题的解决方法: 在画布页面上,我访问请求ID并将它们附加到授权请求url的查询字符串中。授权将把request_ids参数转发到我的网站上 “授权”链接上的Javascript: 由于Facebook没有返回登录用户,因此对/me的调用不会返回任何内容。(臭虫)
这稍微简化了一点,但你明白了…亚当的变通方法非常有效,但由于某些原因,它并不完全适合我。我的解决方案是从JS授权获取所有必需的用户数据,并将其写入php会话。希望它能帮助别人 JS auth函数: Action.php
请将您的复制步骤添加到此错误中:谢谢Ben-will,我想我有一个工作要做,我将在这里发布。即使已经有了公认的答案,您也可以尝试删除$facebook->api调用中的“GET”部分(如果您有)。我遇到了同样的问题,然后我删除了上面提到的“GET”部分,然后它立即开始显示所有内容。
top.location = "http://www.facebook.com/dialog/oauth?client_id=MY_CLIENT_ID&scope=PERMISSIONS,MORE_PERMISSIONS&redirect_uri=http://www.MY_WEB_SITE.com/?request_ids=<?php echo $_REQUEST['request_ids']; ?>";
if ($fb_user===0){ //if Facebook doesn't return the user (the bug)
$request_ids = explode( ',', $_REQUEST['request_ids'], 1 ); //get the request_ids param, limit this to one since all request_ids will reference the same user_id
$request_info = $facebook->api('/' + $request_ids[0],'GET'); //get the request info
$fb_user_profile = $facebook->api('/' + $request_info['to']['id']); // $request_info['to']['id'] is the associated user_id (who the request was sent to)
}
else {
$fb_user_profile = $facebook->api('/me');
}
FB.login( function( response ) {
if ( response.authResponse ) {
FB.api('/me', function( response ) {
$.ajax({
url: 'action.php',
type: 'POST',
data: {
id: response.id,
name: response.name,
birthday: response.birthday,
location_id: response.location.id,
location_name: response.location.name,
gender: response.gender,
email: response.email
},
success: function() {
location.href = 'some-page.php';
}
});
});
} else {
alert("Please agree to the Facebook permissions.");
}
}, { scope:'user_location, user_birthday, email, publish_actions' } );
session_start();
$_SESSION['user_info']['id'] = $_REQUEST['id'];
$_SESSION['user_info']['name'] = $_REQUEST['name'];
$_SESSION['user_info']['birthday'] = $_REQUEST['birthday'];
$_SESSION['user_info']['location']['id'] = $_REQUEST['location_id'];
$_SESSION['user_info']['location']['name'] = $_REQUEST['location_name'];
$_SESSION['user_info']['gender'] = $_REQUEST['gender'];
$_SESSION['user_info']['email'] = $_REQUEST['email'];