2013-07-07 6 views
5

ОК, я пытаюсь использовать Hybridauth с Laravel 4. Однако я, кажется, становится очень распространенным при попытке войти в систему с Facebook:laravel4 hybridauth facebook Ошибка аутентификации! Facebook вернул недопустимый идентификатор пользователя

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 sign up page everthing, кажется, работает нормально, просит разрешить разрешения для myadd.dev. После того, как я нажму OK, меня доставят по следующему адресу: http://myapp.ie/social#_=_, где отображается ошибка.

Не уверен, что это актуально: Просто наблюдая за другими сайтами, которые сотрудничают с facebook login .. URL-адрес переадресации выглядит примерно как 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 win) (для меня как минимум) .. может быть некоторая помощь – OZZIE

+0

Одиночная проблема. Я пробовал все перечисленные ниже вещи, но все же застрял! Я отдельно протестировал facebook-php-sdk (github.com/facebook/facebook-php-sdk), и пример в этом работает хорошо. –

+0

Попробуйте решение, упомянутое здесь http://stackoverflow.com/a/20000638/1154919 –

ответ

0

Для любого другого это то, что работает для меня: я переустановить приложение секрет и теперь работает отлично. Не знаю, почему мой первый секретный ключ приложения не работал. Проделал нелепое время, пытаясь исправить эту ошибку.

0

Произошла эта ошибка в прошлом. Решится путем модификации кода Hybridauth.

  1. В ThirdParty/Facebook/base_facebook.php убедитесь, что массив $ CURL_OPTS использует: CURLOPT_SSL_VERIFYPEER => ложный
  2. В моем случае я закрытия сессии файлов для повышения производительности, поэтому я добавил: session_start() внутри Storage.php, где HA :: STORE сеанс var обновляется/отменяется.

Сообщите мне, если это поможет.

0

CURLOPT_SSL_VERIFYPEER => false & Восстановление секретного ключа моего приложения не помогло мне. Я получал эту ошибку из-за конфликта с привилегиями, которые я ранее настраивал. Удаление приложения из моей учетной записи facebook сделало трюк (в настройках конфиденциальности -> приложения).

0

УДАЛИТЬ ТРЕЙЛИНГ СЛАЙД !!! (в 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 И CURLOPT_SSL_VERIFYHOST => false - эти строки кода упомянуты повсюду, но они: protected $ trustForwarded = true; И защищено $ allowSignedRequest = false; были новыми для нас ... и они просто спасли нашу жизнь! Поэтому обратите внимание на настройку $ trustForwarded! Благодаря! –

+0

для Laravel 4 hybridauth конфигурации я использовал этот обратный массив (\t \t "base_url" => "https://example.com.ph/social/auth", \t "провайдеры" => массив ( \t \t «Facebook "=> массив ( \t \t \t "включено"=> правда, \t \t \t "trustForwarded"=> правда, \t \t \t "allowSignedRequest"=> ложным, \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 \t \t \t \t\t => "страница" "дисплей" \t \t \t \t \t \t \t \t \t) \t) ); – Kugutsumen

+0

этот ответ сработал для меня! Не забудьте установить $ trustForwarded и $ allowSignedRequest, как написано в ответе – WorM

0

у меня был та же проблема (хотя использование HybridAuth на Yii), и оказалось, что мое приложение на Facebook все еще было в режиме Sandbox. На HybridAuth не требуется изменений исходного кода, просто нужно отключить режим Sandbox для приложения, и внезапно все сработало. Надеюсь это поможет.

+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/Hybrid/ThirdParty/Facebook/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

Я имел точно такое же сообщение об ошибке на установке wordpress с использованием Hybridauth. Чтобы найти проблему, я установил изолированный тест с помощью Facebook PHP SDK (который использует Hybridauth), чтобы узнать, что curl_exec не был включен на моем хосте. К счастью, легко исправить.

Если вы на апаче открыть вам php.ini и удалить curl_exec из этой линии:

disable_functions = curl_exec 

Обновить конфигурацию апачской и вуаля :)

Надеется, что это поможет кому-то.

Смежные вопросы