0

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

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.

7
  • error is clearly stating must be an instance of OAuth2\Token\Token_Access, instance of OAuth2\Token_Access given IN your controller try use OAuth2\Token\Token_Access; instead of use OAuth2\Token_Access; Commented Jun 27, 2013 at 20:24
  • When I do this, it says: Class 'OAuth2\Token\Token_Access' not found Commented Jun 27, 2013 at 20:40
  • then try use \Token_Access; it will use the Globally available Token_Access class Commented Jun 27, 2013 at 20:41
  • It still says: Class 'Token_Access' not found References this line in the code: $token = new Token_Access(array( 'access_token' => $params->access_token )); Commented Jun 27, 2013 at 21:00
  • any other ideas? Your help is very much appreciated.. Commented Jun 27, 2013 at 21:43

1 Answer 1

7
+50

I studied the source code to the package and it appears to be an error in the Facebook Provider (actually most of the providers)

In the beginning of the Facebook provider for instance it does this:

<?php

use OAuth2\Token\Token_Access;

There is actually no class in the OAuth2\Token namespace. There is however one in the OAuth2 namespace. So replacing the value above with

<?php

use OAuth2\Token_Access;

Should fix your error. You should do this for all the Providers.

PSR namespacing standards dictates underscores map to directories. So OAuth\Token_Access class will generally be looked for in the ./OAuth/Token/Access.php file

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.