philsturgeon / codeigniter-oauth2

NO LONGER ACTIVELY MAINTAINED. USE https://github.com/thephpleague/oauth2-client INSTEAD
http://getsparks.org/packages/oauth2/versions/HEAD/show
351 stars 178 forks source link

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

Open msutyak opened 11 years ago

msutyak commented 11 years ago

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:

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

}

}

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.

X-Y commented 10 years ago

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"

MwirabuaTimothy commented 10 years ago

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

MwirabuaTimothy commented 10 years ago

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