Facebook的OAuth令人难以置信......再次 . 我们有一个相当直接的系统:
-
用户使用OAuth来'receive' Facebook权限(基本用户信息扩展权限:在墙上书写)
-
通过自定义的redirect_uri,用户被重定向回我们的平台,其中用户信息存储在数据库中,用户也使用我们自己的登录系统标记'logged in' .
然而,问题是有时(我重复:有时......)用户无法通过$ user = $ facebook-> getUser()识别;请求 . 只有设置了$ user,用户才会存储在数据库中,因为我们只知道用户已经过身份验证并且能够使用$ facebook-> api('/ me');
奇怪的是,在第一次试用后,用户会收到错误提示,但如果他们再次点击“使用Facebook登录”,一切都会顺利进行 . 而且,并非所有用户都遇到此问题 . 在执行所有登录/帐户创建工作时,我感觉我的代码还没有“识别”用户登录 .
真的希望有人可以提供帮助,下面我发布了代码 .
INITIATION:
$loginUrl = $facebook->getLoginUrl(array('scope' => 'friends_relationships,publish_stream,email,user_birthday,user_location,user_checkins,user_education_history,user_photos','redirect_uri' => 'REDIRECTED_PAGE.php'));
RETURN PAGE (REDIRECT_PAGE.PHP)
$fbuser = $facebook->getUser();
if ($fbuser) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$fbuser = null;
}
}
$uid = $user_profile['id'];
// -> here's the problem: $fbuser is either 0 or not set
if (isset($fbuser) && $fbuser != '0')
{
$dbc = new DBC();
$dbc->connect(0, true);
$fbemailquery = $dbc->executeQuery("SELECT * FROM users WHERE fbuid = '".$uid."'");
if(!$dbc->isResultEmpty($fbemailquery)) {
// USER IS KNOWN, SO LOGIN
}
else {
// NEW USER
$firstname = $user_profile['first_name']; // etc etc
}
$dbc->close();
}
1 回答
Facebook应用程序确实很棘手 . 您是否直接通过您的网站输入申请?或者您使用的是内部Facebook应用程序? (比如apps.facebook.com/application) . 我问你这个因为facebook有一个不同的机制来处理身份验证,这取决于你是在你自己的网站上还是直接在facebook.com上第一个会要求你获得一个访问代码,这个代码嵌入在$ _REQUEST ['code']中var,您可以稍后交换访问令牌(具有您请求的权限) . 但是,如果您通过facebook.com访问,则会通过POST将signed_request发送到您的应用程序画布URL,您必须对其进行解码以获取捆绑在其中的access_code(如果用户已经授权您的应用程序)或不存在(如果用户拒绝了您的应用) .