laravel4 hybridauth facebook身份验证失败! Facebook返回了无效的用户ID

时间:2013-07-07 19:41:50

标签: facebook laravel laravel-4 hybridauth

好的,我正在尝试使用labrvel的Hybridauth。但是当我尝试使用facebook登录时,我似乎变得非常普遍:

  

身份验证失败! Facebook返回了无效的用户ID。

我已阅读所有其他帖子,并且没有运气,所以只是希望有人可以帮助我。

我遵循了本教程:http://www.mrcasual.com/on/coding/laravel4-package-management-with-composer/

并尝试了其他几种配置但没有成功。

这是我的config / 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,所以任何帮助都非常感谢。

哦,我确实意识到这篇文章与其他帖子非常相似,但我还没有找到解决方案。

更新:确切错误:Authentification failed. The user has canceled the authentication or the provider refused the connection.

10 个答案:

答案 0 :(得分: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 :(得分:1)

CURLOPT_SSL_VERIFYPEER =&gt;假, CURLOPT_SSL_VERIFYHOST =&gt;假的

at modules / hybridauth / Hybrid / thirdparty / Facebook / base_facebook.php:128

解决!

答案 2 :(得分:0)

对于其他任何人来说,这对我有用:我重置app秘密,现在效果很好。不知道为什么我的第一个应用程序密钥不起作用。花了很多时间试图解决这个错误。

答案 3 :(得分:0)

过去有这个错误。通过自己修改Hybridauth的代码来解决。

  1. 在thirdparty / Facebook / base_facebook.php中确保$ CURL_OPTS数组使用: CURLOPT_SSL_VERIFYPEER =&gt;假
  2. 就我而言,我正在关闭会话文件以提高性能,所以我补充说: 在session_start() 在正在更新/取消设置HA :: STORE会话var的任何地方的Storage.php中。
  3. 如果有帮助,请告诉我。

答案 4 :(得分:0)

CURLOPT_SSL_VERIFYPEER =&gt;虚假&amp;重置我的应用程序密钥对我不起作用。由于与我之前设置的权限存在某些冲突,我收到此错误。从我的Facebook帐户中删除应用程序就行了(在隐私设置 - &gt;应用程序下)。

答案 5 :(得分:0)

删除 TRAILING SLASH !!! (在config / hybridauth.php中)

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

应该是

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

答案 6 :(得分:0)

我的情况稍微具体一点,但以防万一:小心重定向!

我安装了SSL证书并重定向以强制用户https,但是当我第一次配置HybridAuth时,我没有考虑到这一点。 Facebook请求被重定向到https,导致$_REQUEST数据在此过程中丢失。

对我来说,改变是Hybrid/config.php

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

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

答案 7 :(得分:0)

我遇到了同样的问题(尽管在Yii上使用了HybridAuth)并且我在Facebook上的应用仍处于沙盒模式。 HybridAuth不需要更改源代码,只需关闭应用程序的沙盒模式,突然一切正常。希望这会有所帮助。

答案 8 :(得分:0)

这发生在我身上,因为我的SSL在AWS的负载均衡器中终止

只需更新app / config中的配置文件即可包含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,
        ),
    ),
);

答案 9 :(得分:0)

在使用Hybridauth的wordpress安装上,我有完全相同的错误消息。为了找到问题,我使用Facebook PHP SDK(Hybridauth使用)设置了一个独立的测试,以发现我的主机上没有启用curl_exec。令人高兴的是,这很容易解决。

如果你正在使用apache打开php.ini并从此行删除curl_exec

disable_functions = curl_exec

重新加载你的apache配置并瞧瞧:)

希望这会对某人有所帮助。