2013-07-07 71 views
5

OK,我試圖用Hybridauth與laravel 4。但是我似乎正在試圖與Facebook登錄的時候很常見:laravel4 hybridauth facebook驗證失敗! Facebook的返回一個無效的用戶ID

Authentication failed! Facebook returned an invalid user id.

我已閱讀全部其他職位,並沒有運氣,所以只希望有人能夠幫助我。

我跟着這個教程:http://www.mrcasual.com/on/coding/laravel4-package-management-with-composer/

,並嘗試其他幾種配置,沒有成功。

這裏是我的配置/ hybridauth.php

<?php 
return array(
    "base_url" => "http://myapp.dev/social/auth/", 
    "providers" => array (
     "Facebook" => array (
      "enabled" => true, 
      "keys"  => array ("id" => "****", "secret" => "****"), 

     ), 
    ), 
); 

這裏是我的路線:

Route::get('social/{action?}', array("as" => "hybridauth", function($action = "") 
{ 
    // check URL segment 
    if ($action == "auth") { 
     // process authentication 
     try { 
      Hybrid_Endpoint::process(); 
     } 

     catch (Exception $e) { 
      // redirect back to http://URL/social/ 
      return Redirect::route('hybridauth'); 
     } 
     return; 
    } 

    try { 
     // create a HybridAuth object 
     $socialAuth = new Hybrid_Auth(app_path() . '/config/hybridauth.php'); 
     // authenticate with Facebook 
     $provider = $socialAuth->authenticate("Facebook"); 
     // fetch user profile 
     $userProfile = $provider->getUserProfile(); 
    } 

    catch(Exception $e) { 
     // exception codes can be found on HybBridAuth's web site 
     return $e->getMessage(); 
    } 

    // access user profile data 
    echo "Connected with: <b>{$provider->id}</b><br />"; 
    echo "As: <b>{$userProfile->displayName}</b><br />"; 
    echo "<pre>" . print_r($userProfile, true) . "</pre><br />"; 

    // logout 
    $provider->logout(); 
})); 

所以,當我訪問 「myapp.dev/social」 我帶來了Facebook註冊頁面everthing似乎工作正常,要求我允許myadd.dev的權限。點擊確定後,我會看到以下URL:http://myapp.ie/social#_=_顯示錯誤。

不知道這是否與此相關: 僅通過觀察其他合作Facebook登錄的網站,重定向網址看起來像http://somesite.dev/subdomain/#_=_。換句話說,他們在#=之前有斜線。這是我的問題,我該如何解決?非常新的hybridauth所以任何幫助非常感謝。

哦,我知道這篇文章與其他文章非常相似,但我還沒有找到解決方案。

UPDATE:確切的錯誤:Authentification failed. The user has canceled the authentication or the provider refused the connection.

+0

我注意到,這個問題只發生在Firefox(23.0.1勝)(至少對我來說)..可能是一些幫助 – OZZIE

+0

面對同樣的問題。我已經嘗試了所有下面提到的事情,但仍然卡住!我分別測試了facebook-php-sdk(github.com/facebook/facebook-php-sdk)和那個例子。 –

+0

嘗試這裏提到的解決方案http://stackoverflow.com/a/20000638/1154919 –

回答

0

對於其他人,這是對我工作:我重置應用程序的祕密,現在的偉大工程。不知道爲什麼我的第一個應用程序密鑰不起作用。花了大量的時間試圖解決這個錯誤。

0

以前有這個錯誤。自己解決Hybridauth的代碼。

  1. 在第三方/ Facebook的/ base_facebook.php確保$ CURL_OPTS陣列使用: CURLOPT_SSL_VERIFYPEER =>假
  2. 在我來說,我是閉幕會議文件的性能改進,所以我說: 在session_start() 內Storage.php HA :: STORE session var正在更新/取消設置。

讓我知道,如果它幫助。

0

CURLOPT_SSL_VERIFYPEER =>假&重置我的應用密鑰並沒有爲我工作。由於與之前設置的權限有衝突,我得到此錯誤。從我的Facebook帳戶中刪除應用程序(在隱私設置 - >應用程序下)做了這個竅門。

0

REMOVE結尾的斜線! (在config/hybridauth中。PHP)

"base_url" => "http://myapp.dev/social/auth/",

應該

"base_url" => "http://myapp.dev/social/auth",

+0

這將有助於如果你想說明我在哪裏聲明.... – OZZIE

+0

在'config/hybridauth.php'文件中。 – Foxinni

0

我的情況下,更具體一點,但以防萬一:要當心與重定向!

我已經安裝了SSL證書並通過重定向強制用戶通過https,但是當我第一次配置HybridAuth時,我沒有考慮到這一點。 facebook請求被重定向到https,導致在此過程中丟失了$_REQUEST數據。

對我來說,變化是,在Hybrid/config.php

"base_url" => "http://my-site.com/"

"base_url" => "https://my-site.com/"

6

在base_facebook.php做以下

public static $CURL_OPTS = array(
    CURLOPT_CONNECTTIMEOUT => 50, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_TIMEOUT  => 60, 
    CURLOPT_USERAGENT  => 'facebook-php-3.2', 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => false, 
); 

    protected $trustForwarded = true; 
    protected $allowSignedRequest = false; 
+1

CURLOPT_SSL_VERIFYPEER => false AND CURLOPT_SSL_VERIFYHOST => false - 這些代碼行提到無處不在,但這些: protected $ trustForwarded = true; AND protected $ allowSignedRequest = false;對我們來說是新的......他們只是拯救了我們的生命!所以要注意$ trustForward設置!謝謝! –

+0

爲laravel 4 hybridauth配置我用該返回陣列(\t \t 「BASE_URL」=> 「https://example.com.ph/social/auth」, \t 「商」=>數組( \t \t「臉譜「=>數組( \t \t \t 」有效「=>真, \t \t \t 」trustForwarded「=>真, \t \t \t 」allowSignedRequest「=>假, \t \t \t 」鑰匙「=>數組(\t 「ID」 \t \t => 「XXX」, \t \t \t \t \t \t \t \t \t 「祕密」 \t => 「XXX」), \t \t \t \t \t \t \t \t \t 「範圍」 \t =>「電子郵件「, \t \t \t \t \t \t \t \t \t 「顯示」 \t => 「網頁」 \t \t \t \t \t \t \t \t \t) \t) ); – Kugutsumen

+0

這個答案適合我!不要忘了設置$ trustForwarded和$ allowSignedRequest寫在答案 – WorM

0

我在同樣的問題(儘管在Yii上使用HybridAuth),結果我在Facebook上的應用程序仍然處於沙盒模式。 HybridAuth不需要更改源代碼,只需關閉應用程序的沙箱模式並突然一切正常。希望這可以幫助。

+1

http://stackoverflow.com/questions/20706322/how-to-disable-sandbox-mode-for-app-in-new-facebook-developer – Slawa

+0

謝謝,幸運的是我已經知道在哪裏可以找到開關。 – thorne51

1

CURLOPT_SSL_VERIFYPEER =>假, CURLOPT_SSL_VERIFYHOST =>假

在模塊/ hybridauth /混合/第三方/實/ base_facebook.php:128

解決了!

+1

沒有爲我工作 –

0

這發生在我身上,因爲我的SSL是AWS的負載平衡器終止

在您的應用程序/配置只需更新配置文件以包括trustForwarded設置

<?php 

return array(
    'base_url' => 'http://website.com/oauth/auth', 
    'providers' => array (
     'Facebook' => array (
      'enabled' => true, 
      'keys'  => array ('id' => 'redacted', 'secret' => 'redacted'), 
      'trustForwarded' => true, 
     ), 
    ), 
); 
0

我有相同的錯誤信息在使用Hybridauth的wordpress安裝上。爲了找到問題,我設置了一個與Facebook PHP SDK(Hybridauth使用)的隔離測試,以發現curl_exec未在我的主機上啓用。幸運的是,一個簡單的修復。

如果你是在Apache打開您php.ini,並從該行刪除curl_exec

disable_functions = curl_exec 

刷新你的Apache配置瞧:)

希望這會幫助別人。

相關問題