laravel4 hybridauth facebook Аутентификация не удалась! Facebook вернул неверный идентификатор пользователя

ОК, я пытаюсь использовать Hybridauth с laravel 4. Однако, похоже, я получаю очень распространенное при попытке войти в систему через facebook:

Аутентификация не удалась! Facebook вернул неверный идентификатор пользователя.

Я прочитал все остальные сообщения, и мне не повезло, поэтому просто надеюсь, что кто-то сможет мне помочь.

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

Не уверен, что это актуально: просто наблюдая за другими сайтами, которые сотрудничают с входом в facebook ... URL-адрес перенаправления выглядит примерно так http://somesite.dev/subdomain/#_=_ . Другими словами, у них есть косая черта перед #=. Это моя проблема, как мне это исправить?? Очень новичок в hybridauth, поэтому спасибо за любую помощь.

О, я понимаю, что этот пост очень похож на другие посты, но мне еще предстоит найти решение.

ОБНОВЛЕНИЕ: точная ошибка: Authentification failed. The user has canceled the authentication or the provider refused the connection.


person user1543871    schedule 07.07.2013    source источник
comment
Я заметил, что эта проблема возникает только в Firefox (победа 23.0.1) (по крайней мере, для меня).. может помочь   -  person OZZIE    schedule 10.09.2013
comment
Столкнулся с той же проблемой. Я пробовал все нижеперечисленные вещи, но все еще застрял! Я отдельно протестировал facebook-php-sdk (github.com/facebook/facebook-php-sdk), и этот пример работает очень хорошо.   -  person Akshay Raje    schedule 27.10.2013
comment
Попробуйте упомянутое здесь решение stackoverflow.com/a/20000638/1154919.   -  person Yuriy Yakubskiy    schedule 15.11.2013


Ответы (10)


В 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;
person Fedir Petryk    schedule 22.11.2013
comment
CURLOPT_SSL_VERIFYPEER =› false AND CURLOPT_SSL_VERIFYHOST =› false — эти строчки кода упоминаются везде, но эти: protected $trustForwarded = true; И защищено $allowSignedRequest = false; были новыми для нас... и они просто спасли нам жизнь! Так что обратите внимание на настройку $trustForwarded! Спасибо! - person Sergey Yarotskiy; 30.06.2014
comment
для конфигурации laravel 4 hybridauth я использовал этот возвращаемый массив (base_url => example.com.ph/social/auth, provider =› array ( Facebook =› array ( enabled =› true, trustForwarded =› true, allowSignedRequest =› false, keys =› array ( id =› xxx, secret =› xxx ), scope =› электронная почта, дисплей =› страница ) ) ); - person Kugutsumen; 08.08.2014
comment
этот ответ сработал для меня! не забудьте установить $trustForwarded и $allowSignedRequest, как написано в ответе - person WorM; 10.08.2014

CURLOPT_SSL_VERIFYPEER => ложь, CURLOPT_SSL_VERIFYHOST => ложь

в модулях/гибридаут/гибрид/третьи стороны/Facebook/base_facebook.php:128

решено!

person martinbrambati    schedule 28.02.2014

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

person user1543871    schedule 07.07.2013

Была эта ошибка в прошлом. Решено путем изменения кода Hybridauth самостоятельно.

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

Дайте мне знать, если это поможет.

person wholenewstrain    schedule 08.07.2013

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

person Ben    schedule 14.08.2013

УДАЛИТЕ КОНЕЧНУЮ СКОСНУЮ ЧАСТЬ !!! (в config/hybridauth.php)

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

должно быть

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

person Foxinni    schedule 25.08.2013
comment
В файле config/hybridauth.php. - person Foxinni; 10.09.2013

Мой случай был немного более конкретным, но на всякий случай: Осторожнее с переадресацией!

У меня был установлен SSL-сертификат и перенаправление, чтобы заставить пользователя использовать https, но когда я впервые настроил HybridAuth, я не принял это во внимание. Запрос facebook был перенаправлен на https, что привело к потере данных $_REQUEST в процессе.

Для меня изменение было в Hybrid/config.php:

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

to

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

person Telmo Marques    schedule 10.11.2013

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

person thorne51    schedule 28.11.2013
comment
stackoverflow.com/questions/20706322/ - person Slawa; 20.03.2014

Это произошло со мной, потому что мой 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,
        ),
    ),
);
person wyred    schedule 29.09.2014

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

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

disable_functions = curl_exec

Перезагрузите конфигурацию apache и вуаля :)

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

person lhermann    schedule 01.02.2016