[英]Facebook PHP SDK - User not authenticated
我正在使用Facebook PHP SDK來驗證用戶。 使用PHP SDK生成LoginUrl
后,單擊該LoginUrl
的用戶將重定向到Facebook頁面,以請求權限。 單擊“ Go to App
鏈接后,用戶將被重定向回我的網站http://www.mydomain.com/login/facebook_connect
。
問題:在被Facebook“認證”后,位於http://www.mydomain.com/login/facebook_connect
的PHP腳本無法確定用戶已通過Facebook登錄。 此時, $user = $facebook->getUser();
是0。
我做錯什么了嗎? 謝謝!
生成LoginUrl
頁面的PHP代碼
require 'libs/fb-php-sdk/facebook.php';
// Create our Application instance
$facebook = new Facebook(array(
'appId' => '123',
'secret' => '123'
));
// Get User ID
$user = $facebook->getUser();
// Get Login URL
$loginUrl = $facebook->getLoginUrl(array(
"scope" => "email,user_education_history,user_work_history",
"redirect_uri" => "http://www.mydomain.com/login/facebook_connect/"
));
$data['fb_login_url'] = $loginUrl;
$this->load->view('splash', $data);
頁面用戶的PHP代碼在Facebook身份驗證后重定向到
* HTTP://www.mydomain.com/login/facebook_connect/*
require 'libs/fb-php-sdk/facebook.php';
$facebook = new Facebook(array(
'appId' => '123',
'secret' => '123',
));
// See if there is a user from a cookie
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
print_r($user_profile);
echo $user;
一切似乎都是正確的。
問題:
1.-我以為http://www.mydomain.com/包含您所有的腳本,對嗎?
2.-您在使用codeigniter嗎? 還是基於Codeigniter的CMS? 在這種情況下,您可能遇到會話問題(在CI中很常見)。 檢查它,我們繼續...
編輯2:如果是與cookie相關的問題。 這是一張圖片,顯示您可以使用帶有cookie模塊的firebug來輕松跟蹤您的Cookie:
因此,您可以檢查Facebook Cookie的生成方式。
編輯3:好的。 因此,您正在使用CI,並且您的FB cookie正在被刪除。 可能是會話問題。 這是一個相關的答案 ,我解釋了如何使用會話CI庫替換,通常解決所有這些痛苦的問題。 相信我,試試看!
a.-這是: Codeigniter的Native會話 (底部有一個下載鏈接)
b.-但是,由於它是一個舊圖書館,你必須做一些黑客攻擊。 您可以在圖書館的論壇中查看這些簡單的黑客
c.-只需將此文件放在codeigniter的庫目錄中即可。
$ facebook-> getUser()使用cookie來獲取用戶。 如果您使用CodeIgniter或其他“自動”分配PHP自動分配的cookie的庫,您需要在CI之外創建一個代理頁面,該代理頁面將重定向回到CI中。
換句話說,將您當前擁有的代碼
http://www.mydomain.com/login/facebook_connect/
並在常規PHP文件中創建一個副本:
http://www.mydomain.com/facebook_pickup.php
不要回顯腳本中的任何內容(刪除print_r),只需重定向到
http://www.mydomain.com/login/facebook_connect/
它會神奇地開始工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.