2015-03-09 11 views
2

Я работаю над приложением Laravel 4.2, созданным с помощью dingo/api и NeoEloquent для поддержки баз данных графиков. Я хочу реализовать OAuth, возможно, используя lucadegasperi/oauth2-server-laravel, но это не работает с NeoEloquent. После того, как я создал клиент в базе данных, при попытке Авторизатор :: issueAccessToken() Я получаю следующее сообщение об ошибке:Ошибка аутентификации клиента при попытке получить токен доступа OAuth

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() 

Я не могу найти какую-либо реализацию OAuth для Laravel, который поддерживает базы данных Graph или работает с NeoEloquent. Кто-нибудь знает, как это сделать?


Update

Часть моего 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.*" 
    }, 

Все мои модели расширить свой собственный NeoArdent, который является копией laravelbook/Ardent с некоторыми изменениями в определениях отношения к заставить его работать с NeoEloquent.

Моих типов грантов в приложении/Config/пакеты/lucadegasperi/oauth2-сервер 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 
    ] 
] 

Моей аутентификация определение поставщика в приложении/Config/пакеты/динго/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(); 

который дает мне ошибку выше.

Надеюсь, это поможет немного понять мою проблему.

+0

Вещь, которую вы должны заметить здесь, заключается в том, что нет такой вещи, как «интеграция» b/w Laravel, dingo/api и NeoEloquent, это три разных «компонента» вашего приложения. Это поможет опубликовать код, который генерирует эту ошибку, а также показывает, как вы используете эти пакеты вместе. – Mulkave

+0

Я добавил код, который поможет вам понять мою проблему немного лучше. – gidomanders

ответ

0

Я не мог дождаться дольше, поэтому я просто перешел на использование MongoDB, используя bmcmurray/ardent-mongodb, который является вилкой laravelbook/Ardent для поддержки jenssegers/laravel-mongodb. Я использовал Ardent, прежде чем преобразовать в базы данных Graph, а затем построил свою собственную вилку для laravelbook/Ardent для поддержки Vinelab/NeoEloquent, поэтому мой код не так сильно изменился.

Существует гораздо больше поддержки при использовании MongoDB с OAuth, как у парня, который опубликовал this question. Я уверен, что смогу сделать OAuth сейчас.

Смежные вопросы