簡體   English   中英

Facebook PHP API 在登錄時拋出異常

[英]Facebook PHP API throwing exception while login

我嘗試使用 Facebook Graph API 登錄並獲取用戶信息。 我用來獲取用戶信息的代碼以前工作過,但今天我嘗試使用 facebook 登錄,但 Facebook API 拋出此錯誤。

未定義的偏移量:1 /home/****/vendor/facebook/php-sdk-v4/src/Facebook/Http/GraphRawResponse.php 第 108 行

該行在此函數中:

public function 
setHttpResponseCodeFromHeader($rawResponseHeader)
{
    preg_match('|HTTP/\d\.\d\s+(\d+)\s+.*|', $rawResponseHeader, $match);
    $this->httpResponseCode = (int)$match[1]; // <---- HERE
}

我的代碼:

    $fb = new Facebook([
        'app_id' => Data::get('fbAppId'),
        'app_secret' => Data::get('fbAppSec'),
        'default_graph_version' => 'v2.5',
    ]);

    $helper = $fb->getRedirectLoginHelper();
    $_SESSION['FBRLH_state'] = $_GET['state'];

    try {
        $accessToken = $helper->getAccessToken();
        $_SESSION['token'] = $accessToken;
        DB::table('settings')->where('userId', Auth::user()->id)->update(['fbAppToken' => $accessToken]); // save user access token to database
        $this->saveFbPages(); // save facebook pages and token
        $this->saveFbGroups(); // save facebook groups to database

    } catch (FacebookResponseException $e) {
        // When Graph returns an error
        return '[a] Graph returned an error: ' . $e->getMessage();

    } catch (FacebookSDKException $e) {
        // When validation fails or other local issues
        return '[a] Facebook SDK returned an error: ' . $e->getMessage();

    }

請在第 107 行打開 /home/xxxxxx/public_html/vendor/facebook/graph-sdk/src/Facebook/Http/GraphRawResponse.php 當前代碼:

preg_match('|HTTP/\d.\d\s+(\d+)\s+.*|',$rawResponseHeader, $match);

您可以將代碼編輯為:

preg_match('/HTTP\/\d(?:\.\d)?\s+(\d+)\s+/',$rawResponseHeader, $match);

這對我來說就像魅力一樣。 我希望,這也能解決你的問題。 感謝您提出這個美麗的問題。

這似乎是 PHP 圖形 SDK 中的一個已知問題。 此問題僅在兩天前應用了修復程序,從其 repoGitHub 問題中可以看出。 另一方面,上一次發布是在 7 月初,因此此修復程序目前在 SDK 的最新發布版本中不可用。

您有幾個選擇:

  1. 您可以嘗試降級 PHP 使用的 curl 版本。
  2. 如果您願意運行可能不穩定的 SDK 版本,您可以考慮更新到主分支而不是發布版本。
  3. 您可以應用與提交到存儲庫的修復程序匹配的修補程序。

這些是按照最優選到最不優選的順序給出的,穩定性和可靠性是主要問題。

我認為您使用的是過時版本的 Facebook SDK (php-sdk-v4),您應該使用版本 5。

https://github.com/facebook/php-graph-sdk

現在的問題是 facebook 將 PHP SDK 標記為 "archived" 。 考慮使用這個包登錄: https : //github.com/thephpleague/oauth2-facebook 它支持 PHP 8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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