2013-06-27 57 views
0

我正在使用Laravel 4的laravel-oauth2软件包来设置Facebook登录。我正在使用这里看到的包:https://github.com/madewithlove/laravel-oauth2Laravel-Oauth2问题Laravel 4

当运行控制登录页面,公共/ oauth/Facebook,Facebook提示符显示正常,但是当我点击“接受”,页面吐出以下错误:

ErrorException 
Argument 1 passed to OAuth2\Provider\Facebook::get_user_info() must be an instance of OAuth2\Token\Token_Access, instance of OAuth2\Token_Access given, called in /Applications/MAMP/htdocs/crowdsets/laravel-master/app/controllers/Oauth2Controller.php on line 36 and defined 

它指向/­vendor/­taylorotwell/­laravel-oauth2/­src/­OAuth2/­Provider/­Facebook.php: 26

在Facebook.php的get_user_info()功能如下:

public function get_user_info(Token_Access $token) 
    { 
     $url = 'https://graph.facebook.com/me?'.http_build_query(array(
      'access_token' => $token->access_token, 
     )); 

     $user = json_decode(file_get_contents($url)); 

     // Create a response from the request 
     return array(
      'uid' => $user->id, 
      'nickname' => $user->username, 
      'name' => $user->name, 
      'email' => $user->email, 
      'location' => $user->hometown->name, 
      'description' => $user->bio, 
      'image' => 'https://graph.facebook.com/me/picture?type=normal&access_token='.$token->access_token, 
      'urls' => array(
       'Facebook' => $user->link, 
      ), 
     ); 
    } 

我Oauth2Controller.php文件看起来像这样:

<?php 

    use OAuth2\OAuth2; 
    use OAuth2\Token_Access; 
    use OAuth2\Exception as OAuth2_Exception; 

class Oauth2Controller extends BaseController 
{ 



    public function getIndex($provider) { 


     $provider = OAuth2::provider($provider, array(
     'id' => '****************', 
     'secret' => '********************', 
     )); 

     if(! isset($_GET['code'])) { 

      return $provider->authorize(); 

     } 

     else 
    { 
     // Howzit? 
     try 
     { 
      $params = $provider->access($_GET['code']); 

       $token = new Token_Access(array(
        'access_token' => $params->access_token 
       )); 
       $user = $provider->get_user_info($token); 

      // Here you should use this information to A) look for a user B) help a new user sign up with existing data. 
      // If you store it all in a cookie and redirect to a registration page this is crazy-simple. 
      echo "<pre>"; 
      var_dump($user); 
     } 

     catch (OAuth2_Exception $e) 
     { 
      show_error('That didnt work: '.$e); 
     } 
    } 

    } 


} 

我不知道为什么它是给了我这个错误,因为我跟着文档和教程。感谢您为解决此问题提供的帮助。

+0

错误明确指出'必须是OAuth2 \ Token \ Token_Access的实例,OAuth2 \ Token_Access的实例'在控制器中尝试使用OAuth2 \ Token \ Token_Access; '代替'使用OAuth2 \ Token_Access;' –

+0

当我这样做时,它说:Class'OAuth2 \ Token \ Token_Access'找不到 – user1072337

+0

然后尝试'use \ Token_Access;'它会使用全局可用的Token_Access类 –

回答

7

我学的是源代码包,它似乎是在Facebook的提供者(实际上大多数供应商)

在Facebook上提供了实例的开头它这样的错误:

<?php 

use OAuth2\Token\Token_Access; 

OAuth2 \ Token名称空间中实际上没有任何类。然而,在OAuth2命名空间中有一个。所以用

<?php 

use OAuth2\Token_Access; 

替换上面的值应该解决你的错误。你应该为所有提供者做到这一点。

PSR命名空间标准规定将下划线映射到目录。因此OAuth\Token_Access类一般会在./OAuth/Token/Access.php文件中寻找

+0

这确实有效!非常感谢你,获得丰厚的奖金。 – user1072337