2

Graphデータベースをサポートするために、 dingo/apiNeoEloquentで構築されたLaravel 4.2アプリに取り組んでいます。おそらくlucadegasperi/oauth2-server-laravelを使用して OAuth を実装したいのですが、これは NeoEloquent では機能しません。データベースにクライアントを作成した後、Authorizer::issueAccessToken() を試行すると、次のエラーが発生します。

exception 'League\OAuth2\Server\Exception\InvalidClientException' with message 'Client authentication failed.' in /home/vagrant/code/vendor/league/oauth2-server/src/Grant/PasswordGrant.php:114
Stack trace:
#0 /home/vagrant/code/vendor/league/oauth2-server/src/AuthorizationServer.php(275): League\OAuth2\Server\Grant\PasswordGrant->completeFlow()
#1 /home/vagrant/code/vendor/lucadegasperi/oauth2-server-laravel/src/Authorizer.php(80): League\OAuth2\Server\AuthorizationServer->issueAccessToken()
#2 /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(205): LucaDegasperi\OAuth2Server\Authorizer->issueAccessToken()

Graph データベースをサポートする、または NeoEloquent と連携する Laravel の OAuth 実装が見つかりません。誰もこれを解決する方法について何か考えがありますか?


アップデート

私の composer.json の一部:

"require": {
        "laravel/framework": "4.2.*",
        "vinelab/neoeloquent": "*",
        "laravelbook/ardent": "~2.4",
        "doctrine/dbal": "~2.5",
        "lucadegasperi/oauth2-server-laravel": "3.*",
        "dingo/api": "0.8.*"
    },

私のモデルはすべて、NeoEloquentで動作するように関係定義にいくつかの変更を加えたlaravelbook/Ardentのコピーである、私自身のNeoArdentを拡張しています。

app/config/packages/lucadegasperi/oauth2-server-laravel/oauth2.php の付与タイプ

'grant_types' => [
    'password' => [
        'class' => '\League\OAuth2\Server\Grant\PasswordGrant',
        'callback' => function($username, $password) {
            if( Auth::validate([
                'email'    => $username,
                'password' => $password,
            ])){
                $user = User::where('email', $username)->first();
                return $user->id;
            } else {
                return false;
            }
        },
        'access_token_ttl' => 3600
    ]
]

app/config/packages/dingo/api/config.php での認証プロバイダーの定義

'auth' => [
    'oauth' => function ($app) {
        $provider = new Dingo\Api\Auth\LeagueOAuth2Provider($app['oauth2-server.authorizer']->getChecker());

        $provider->setUserResolver(function ($id) {
            return User::findOrFail($id);
        });

        $provider->setClientResolver(function ($id) {
            return User::findOrFail($id);
        });
        return $provider;
    }
]

認証コードを取得する前に、これを一時的に使用してクライアントを作成します。

if (!DB::table('oauth_clients')->count()) {
    $client = [
        'id' => 'angularApp',
        'secret' => 'angularAppSecret',
        'name' => 'angularApp'
    ];
    DB::table('oauth_clients')->insert($client);
}

その後、私はこれを行います:

Auth::login($user);
Input::merge(['grant_type' => 'password', 'client_id' => 'angularApp', 'client_secret' => 'angularAppSecret']);
return AuthorizerFacade::issueAccessToken();

上記のエラーが表示されます。

これが私の問題を理解するのに少し役立つことを願っています。

4

1 に答える 1