codeigniter-oauth2 icon indicating copy to clipboard operation
codeigniter-oauth2 copied to clipboard

Argument 1 passed to OAuth2\Provider\Facebook::get_user_info() must be an instance of OAuth2\Token\Token_Access

Open msutyak opened this issue 12 years ago • 3 comments

I am using the laravel-oauth2 package for Laravel 4 to set up a Facebook login. I am using the package seen here: https://github.com/madewithlove/laravel-oauth2 (which is based on your repository here).

When running the page that controls the login, the public/oauth/facebook, the Facebook prompt comes up fine, but when I click "accept", the page spits out the following error:

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 It is pointing to /­vendor/­taylorotwell/­laravel-oauth2/­src/­OAuth2/­Provider/­Facebook.php: 26

The get_user_info() function in Facebook.php looks like this:

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,
        ),
    );
}

My Oauth2Controller.php file looks like this:

'****************', '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 "
";
        var_dump($user);
    }

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

}
```

}

I am not sure why it is given me this error, as I followed the documentation and tutorials. Thank you for your help with solving this issue.

msutyak avatar Jun 27 '13 00:06 msutyak

Had the same issue, I'm using PHP 5.4.7 and trying to connect to google.

This question from stackoverflow is probably the answer? http://stackoverflow.com/questions/17332530/laravel-oauth2-issue-in-laravel-4

However after I fixed the problem of "OAuth2\Token\Token_Access", there's a new error pointing to line 70 of Provider/Google.php:

'nickname' => strtolower(Laravel\Str::slug($user['name'], '_')),

Where it says "Class 'OAuth2\Provider\Laravel\Str' not found"

X-Y avatar Aug 19 '13 18:08 X-Y

Did you manage to solve the Google error? Coz I got to this point too. Thanks

TimTruston avatar Dec 17 '13 16:12 TimTruston

Oh, I just had to comment out that line and it worked just fine. Thanks

TimTruston avatar Dec 18 '13 14:12 TimTruston