0

Laravel 4 の laravel-oauth2 パッケージを使用して、Facebook ログインを設定しています。ここにあるパッケージを使用しています: https://github.com/madewithlove/laravel-oauth2

ログインを制御するページ (public/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);
        }
    }

    }


}

ドキュメントとチュートリアルに従ったため、このエラーが表示される理由がわかりません。この問題の解決にご協力いただきありがとうございます。

4

1 に答える 1

8

パッケージのソース コードを調べたところ、Facebook プロバイダー (実際にはほとんどのプロバイダー) のエラーのようです。

たとえば、Facebook プロバイダーの冒頭では、次のようにします。

<?php

use OAuth2\Token\Token_Access;

OAuth2\Token 名前空間には実際にはクラスがありません。ただし、OAuth2 名前空間には 1 つ存在します。したがって、上記の値を次のように置き換えます

<?php

use OAuth2\Token_Access;

エラーを修正する必要があります。すべてのプロバイダーに対してこれを行う必要があります。

PSR 名前空間標準では、ディレクトリへのアンダースコア マップが規定されています。したがって、OAuth\Token_Accessクラスは通常、./OAuth/Token/Access.phpファイルで検索されます

于 2013-06-29T03:01:26.223 に答える