2016-05-31 138 views
0

我正在嘗試設置基本登錄w/Facebook按鈕。正確的Facebook PHP SDK登錄路線

這基本上就是我複製: https://developers.facebook.com/docs/php/howto/example_facebook_login

唯一的區別是我想要的一切設置在一個文件中(這樣我就可以讓所有的社會登錄代碼在一個地方),我希望創建鏈接並將用戶全部重定向到一個。

當我點擊處理程序生成的頁面時,我得到一個「對不起這個頁面不可用」的消息。

Twitter的流程基本上是一樣的(它是完整的,功能沒有問題)。我確實將oauth標記保存到了一個數據庫中,但我還沒有完成對Facebook部分的處理。它會保存保存表,我只保存oauth提供程序或其他東西。

這裏的要點是:

switch(strtolower($_REQUEST['method'])) {  
case 'twitter': 
    /*ommited, but it's basically the same flow*/ 
    break; 

case 'facebook': 
    // if we don't have a step, we don't know what to do 
    if (!isset($_REQUEST['step'])) { 
     die('Fail: invalid step: (none)'); 
    } 

    // we'll be using the Facebook PHP SDK 
    require(FACEBOOK_SDK_PATH); 

    switch(strtolower($_REQUEST['step'])) { 
     case 1: 
      // instantiates a new SDK App object 
      $fb = new Facebook\Facebook([ 
       'app_id' => FACEBOOK_APP_ID, 
       'app_secret' => FACEBOOK_APP_SECRET, 
       'default_graph_version' => '2.0' 
      ]); 

      // gets helper 
      $helper = $fb->getRedirectLoginHelper(); 

      // optional permissions parameter 
      // we want the users email address 
      $permissions = ['email']; 

      // generates the url for the user to authorize access 
      $loginUrl = $helper->getLoginUrl('http://localhost/social-login.php?method=facebook&step=2', $permissions); 

      // redirect user 
      header('Location: ' . $loginUrl); 

      break; 

     case 2: 
      // this should include an access token so we can get information about the user and consider them authenticated 
      echo '<pre>'; 
      var_dump($_SESSION); 
      var_dump($_REQUEST); 
      echo '</pre>'; 
      die(); 

      break; 

     default: 
      die('Fail: invalid step: ' . $_REQUEST['step']); 
    } 
    break; 

default: 
    die('Fail: invalid method . ' . $_REQUEST['method']); 
} 

我倒上面的文件了,只是想不出有什麼遺漏。它可能是應用程序端的設置?本地主機回調的問題?

我將默認圖形版本匹配到應用程序設置爲(2.0)的任何位置。我不確定是否可以改變,但是我看到很多使用2.2和2.5的代碼,但我無法弄清楚這是否也可能是我的問題的一部分。我不會假設,但我想我會在這裏寫一張便條。

+0

_「我得到一個‘對不起,該網頁無法使用’消息」 _ - 哪裏的?這是您的應用程序明確輸出的消息嗎?或者你只是指瀏覽器的默認錯誤頁面?檢查瀏覽器的開發工具網絡面板中發生了什麼 - 您是否看到500或其他服務器端錯誤?去檢查服務器的日誌文件。 – CBroe

+0

@CBroe這是我重定向到由SDK生成的URL時得到的消息。 http://i.imgur.com/XWhpDpb.png – Jeff

回答

2
$fb = new Facebook\Facebook([ 
    'app_id' => FACEBOOK_APP_ID, 
    'app_secret' => FACEBOOK_APP_SECRET, 
    'default_graph_version' => '2.0' 
]); 

您指定了API版本錯誤,因此SDK創建了錯誤的登錄對話框URL。

您需要包括v

'default_graph_version' => 'v2.0' 
+0

完美,謝謝! – Jeff