2013-07-07 61 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配置瞧:)

希望这会帮助别人。

相关问题