Facebook的OAuth令人难以置信......再次。我们有一个相当直接的系统:
然而,问题是有时(我重复:有时......)用户无法通过$ 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(); }
答案 0 :(得分:0)
Facebook应用程序确实很棘手。您是否直接通过您的网站输入申请?或者您使用的是内部Facebook应用程序? (比如apps.facebook.com/application)。我问你这个因为facebook有一个不同的机制来处理身份验证,这取决于你是在你自己的网站上还是直接在facebook.com上第一个会要求你获得一个访问代码,这个代码嵌入在$ _REQUEST ['code']中var,您可以稍后交换访问令牌(具有您请求的权限)。但是,如果您通过facebook.com访问,则会通过POST将signed_request发送到您的应用程序画布URL,您必须对其进行解码以获取捆绑在其中的access_code(如果用户已经授权您的应用程序)或不存在(如果用户拒绝了您的应用。)