簡體   English   中英

Facebook PHP SDK - 未經過身份驗證的用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM