designmynight / laravel-mongodb-passport

A package to get Laravel Passport working with MongoDB
MIT License
67 stars 75 forks source link

Call to a member function prepare() on null during password grant token request #38

Closed o-leolleo closed 4 years ago

o-leolleo commented 4 years ago

Package versions

Description

When issuing password grant tokens by /oauth/token route, the error shown in the Stack Trace Below occurs, making the token issue requests not to work as expected.

It seems that the laravel/passport package has added a RefreshToken model in its latest changes which it's not handled by the MongodbPassportServiceProvider.

I've made a fork to do it and, besides not having tested it thoroughly, it makes the route work again.

Stack Trace

Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function prepare() on null in file /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 457

#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(662): Illuminate\Database\Connection->Illuminate\Database\{closure}('insert into "oa...', Array)
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(629): Illuminate\Database\Connection->runQueryCallback('insert into "oa...', Array, Object(Closure))
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(464): Illuminate\Database\Connection->run('insert into "oa...', Array, Object(Closure))
#3 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php(416): Illuminate\Database\Connection->statement('insert into "oa...', Array)
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2651): Illuminate\Database\Connection->insert('insert into "oa...', Array)
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1366): Illuminate\Database\Query\Builder->insert(Array)
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(815): Illuminate\Database\Eloquent\Builder->__call('insert', Array)
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(667): Illuminate\Database\Eloquent\Model->performInsert(Object(Illuminate\Database\Eloquent\Builder))
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(765): Illuminate\Database\Eloquent\Model->save()
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/helpers.php(422): Illuminate\Database\Eloquent\Builder->Illuminate\Database\Eloquent\{closure}(Object(Laravel\Passport\RefreshToken))
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(766): tap(Object(Laravel\Passport\RefreshToken), Object(Closure))
#11 /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\Database\Eloquent\Builder->create(Array)
#12 /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1620): Illuminate\Database\Eloquent\Model->forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), 'create', Array)
#13 /var/www/html/vendor/laravel/passport/src/RefreshTokenRepository.php(15): Illuminate\Database\Eloquent\Model->__call('create', Array)
#14 /var/www/html/vendor/laravel/passport/src/Bridge/RefreshTokenRepository.php(57): Laravel\Passport\RefreshTokenRepository->create(Array)
#15 /var/www/html/vendor/league/oauth2-server/src/Grant/AbstractGrant.php(527): Laravel\Passport\Bridge\RefreshTokenRepository->persistNewRefreshToken(Object(Laravel\Passport\Bridge\RefreshToken))
#16 /var/www/html/vendor/league/oauth2-server/src/Grant/PasswordGrant.php(65): League\OAuth2\Server\Grant\AbstractGrant->issueRefreshToken(Object(Laravel\Passport\Bridge\AccessToken))
#17 /var/www/html/vendor/league/oauth2-server/src/AuthorizationServer.php(198): League\OAuth2\Server\Grant\PasswordGrant->respondToAccessTokenRequest(Object(Nyholm\Psr7\ServerRequest), Object(League\OAuth2\Server\ResponseTypes\BearerTokenResponse), Object(DateInterval))
#18 /var/www/html/vendor/laravel/passport/src/Http/Controllers/AccessTokenController.php(63): League\OAuth2\Server\AuthorizationServer->respondToAccessTokenRequest(Object(Nyholm\Psr7\ServerRequest), Object(Laminas\Diactoros\Response))
#19 /var/www/html/vendor/laravel/passport/src/Http/Controllers/HandlesOAuthErrors.php(24): Laravel\Passport\Http\Controllers\AccessTokenController->Laravel\Passport\Http\Controllers\{closure}()
#20 /var/www/html/vendor/laravel/passport/src/Http/Controllers/AccessTokenController.php(65): Laravel\Passport\Http\Controllers\AccessTokenController->withErrorHandling(Object(Closure))
#21 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(48): Laravel\Passport\Http\Controllers\AccessTokenController->issueToken(Object(Nyholm\Psr7\ServerRequest))
#22 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Laravel\Passport\Http\Controllers\AccessTokenController), 'issueToken')
#23 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\Routing\Route->runController()
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(681): Illuminate\Routing\Route->run()
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#26 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(171): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure))
#28 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(105): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#29 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(683): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#30 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#31 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(624): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#32 /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(613): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#33 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(170): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#34 /var/www/html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(130): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#35 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
michaeljennings commented 4 years ago

I'm having the same issue and your fork fixes it for me, can we get this merged in?

o-leolleo commented 4 years ago

Hey, @michaeljennings this is really interesting , I've opened a PR, the https://github.com/designmynight/laravel-mongodb-passport/pull/39