我正在开发使用Laravel 4.2和dingo/api构建的NeoEloquent应用,以支持Graph数据库。我想实现OAuth,可能使用lucadegasperi/oauth2-server-laravel,但这不适用于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.*"
},
我的所有模型都扩展了我自己的NeoArdent,它是laravelbook/Ardent的副本,关系定义发生了一些变化,使其与NeoEloquent一起使用。
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();
这给了我上面的错误。
我希望这有助于理解我的问题。
答案 0 :(得分:0)
我等不了多久,所以我改为使用bmcmurray/ardent-mongodb使用MongoDB,laravelbook/Ardent支持jenssegers/laravel-mongodb来支持laravelbook/Ardent。我在转换为Graph数据库之前使用了Ardent,然后为Vinelab/NeoEloquent构建了自己的fork来支持this question,所以我的代码没有那么大的变化。
对于使用带有OAuth的MongoDB有很多支持,比如发布{{3}}的人。我确信我现在可以让OAuth工作了。