2012-02-17 110 views
1

我使用Facebook PHP SDK對用戶進行身份驗證。在使用PHP SDK生成LoginUrl之後,用戶單擊該LoginUrl將被重定向到Facebook頁面以請求許可。點擊Go to App鏈接後,用戶將被重定向回我的網站http://www.mydomain.com/login/facebook_connectFacebook PHP SDK - 用戶未經過身份驗證

問題:經Facebook'認證'後,http://www.mydomain.com/login/facebook_connect的PHP腳本無法確定用戶是否通過Facebook登錄。此時,$user = $facebook->getUser();爲0.

我做錯了什麼?謝謝!

PHP代碼的頁面,生成LoginUrl

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; 
+0

當facebook重定向回您的網站時,您是否檢查完整的網址?應該有一個access_token參數。 – 2012-02-17 21:16:25

+0

重定向現在工作正常,使用'redirect_uri'而不是'next'。 – Nyxynyx 2012-02-17 22:16:40

+0

這是URL重定向後,我回到我的網站從Facebook認證頁面:'HTTP://www.mydomain.com/facebook_pickup.php狀態= f210c06a9854f43edd12bdb57993e1da&代碼= AQCUp3YsSVNa2LfnKR1EXr_wq3BapIHJ5qr7nNury0fJQidb-nnkn2ZIxImMvN92CtiLwkZTmmzWelv9Lt8EDor2Q2YmKSDI6OoFTiNe8OZdDLLO5YATYA4-Bc1_y8qOcwOzq8-gzj4u__BwuLJLJFYe4e4plXgREYK6EbTXB872QCtz2aiSen0dpHPSdkfXncs#_ = _'有是沒有access_token參數... – Nyxynyx 2012-02-17 22:20:22

回答

1

$ facebook-> getUser()使用cookie來獲取用戶。如果您使用CodeIgniter或另一個「吃」PHP自動分配的cookie的庫,則需要在CI外部創建一個代理頁面,以便將cookie重定向回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/ 

它會奇蹟般地開始工作。

+0

無論如何阻止Codeigniter僅僅爲了該控制器功能而自動吃掉cookie? – Nyxynyx 2012-02-17 20:04:31

+0

我可以只包含在http:// www.mydomain.com/facebook_pickup.php中,它可以包含:$ facebook = new Facebook(array( 'appId'=>'123', 'secret'=>'123' )); //查看是否有來自cookie的用戶 $ user = $ facebook-> getUser();' 仍然可以從http://www.mydomain.com/login/facebook_connect訪問$ facebook和$ user /第二次重定向後? – Nyxynyx 2012-02-17 20:13:33

2

一切似乎都正確。

問題:
1.-我認爲http://www.mydomain.com/包含所有腳本,對吧?
2.-你在使用codeigniter嗎?或者一個基於codeigniter的CMS?在這種情況下,你可能會遇到一個會話問題(在CI中很常見)。檢查它,我們繼續...


編輯2:如果是一個cookie相關的問題。這裏是一個圖像顯示,你可以使用螢火用一個cookie模塊,輕鬆地跟蹤您的Cookie:

enter image description here

所以,你可以檢查正在生成的Cookie如何使用Facebook。


編輯3:好的。所以你使用CI和你的FB cookies被刪除。也許是會話問題。這裏是一個related answer,我解釋瞭如何使用會話CI庫替換,通常解決所有這些類型的痛苦問題。相信我,試試吧!

A.-這是:Codeigniter's Native session(有在底部的下載鏈接)

B.-,但由於它是你必須做一些黑客的老圖書館。您可以在library's forum

中檢查這些簡單的黑客c .-只需將此文件放在codeigniter的庫目錄中即可。

+0

是的,我使用Codeigniter! – Nyxynyx 2012-02-17 20:02:39

+0

:)我知道了!米蘭Babuškov給出的答案似乎很巧妙。如果不行,我可以推薦你一個基於會話的解決方案。我會在這裏... – 2012-02-17 20:05:30

+0

我很疑惑爲什麼Codeigniter會刪除Facebook cookies?並且Facebook是在Facebook爲用戶驗證我的websiste之後創建的cookie嗎?還是PHP SDK設置了cookie? – Nyxynyx 2012-02-17 20:40:31

相關問題