Passport: Trying to get property of non-object in ClientRepository.php (line 80)

Created on 14 Jun 2017  路  17Comments  路  Source: laravel/passport

After some time when trying to create personal access token using vue components, it throws Trying to get property of non-object in ClientRepository.php (line 80)

It works normal again after running the command php artisan passport:install

But if I run php artisan migrate:refresh , again got into the same issue..

needs more info

Most helpful comment

I had the same issue when i upgraded to ^3.0. I ran php artisan passport:install --force to regenerate keys and it worked.

All 17 comments

Which version of Passport are you using?

I'm having the same issue, exactly the way you describe (also how to fix it), but to me, it says its on line #81. I'm on version ^3.0

Please can you paste some stack traces as there just isn't enough information to go on here

I had the same issue when i upgraded to ^3.0. I ran php artisan passport:install --force to regenerate keys and it worked.

Hello @alexbilbie I apologize for the delay in providing more info, below is a stack trace from the log.

I believe this is just an error caused by the lack of the pre-requirement php artisan passport:install.

To replicate the error, start a new laravel project, add passport on composer, and on config/app.php (ServiceProvider), and in my case, I've tried to create a new personal-access-token via the Vue component after a fresh migration.

[2017-08-09 06:07:15] local.ERROR: ErrorException: Trying to get property of non-object in /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/ClientRepository.php:81
Stack trace:
#0 /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/ClientRepository.php(81): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Trying to get p...', '/Users/username/...', 81, Array)
#1 /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/PersonalAccessTokenFactory.php(71): Laravel\Passport\ClientRepository->personalAccessClient()
#2 /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/HasApiTokens.php(67): Laravel\Passport\PersonalAccessTokenFactory->make(1, 'test', Array)
#3 /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/Http/Controllers/PersonalAccessTokenController.php(70): App\User->createToken('test', Array)
#4 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(47): Laravel\Passport\Http\Controllers\PersonalAccessTokenController->store(Object(Illuminate\Http\Request))
#5 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Laravel\Passport\Http\Controllers\PersonalAccessTokenController), 'store')
#6 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Route.php(160): Illuminate\Routing\Route->runController()
#7 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(574): Illuminate\Routing\Route->run()
#8 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#9 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#10 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#11 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#12 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#13 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#14 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#15 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php(54): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#16 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\AuthenticateSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#17 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#18 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#19 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Auth\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#20 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#21 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#22 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#23 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#24 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#25 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#26 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#27 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#28 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#29 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#30 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#31 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#34 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(576): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#35 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(535): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#36 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Router.php(513): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#37 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#38 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#39 /Users/username/Documents/Sites/laravel-project/vendor/laravel/passport/src/Http/Middleware/CreateFreshApiToken.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#40 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Laravel\Passport\Http\Middleware\CreateFreshApiToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 /Users/username/Documents/Sites/laravel-project/app/Http/Middleware/Secure.php(19): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#43 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\Secure->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /Users/username/Documents/Sites/laravel-project/app/Http/Middleware/FirstTimeSetup.php(33): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#46 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): App\Http\Middleware\FirstTimeSetup->handle(Object(Illuminate\Http\Request), Object(Closure))
#47 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#49 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#50 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#51 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#52 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#53 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#54 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#55 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#56 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#57 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#58 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#59 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#60 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#61 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#62 /Users/username/Documents/Sites/laravel-project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#63 /Users/username/Documents/Sites/laravel-project/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#64 /Users/username/.composer/vendor/laravel/valet/server.php(133): require('/Users/username/...')
#65 {main}  
  • Rafa

Based on Laracasts discussion channel, you need to create a personal access token :
php artisan passport:client --personal

@lonewolfffffff thanks, this is what worked with me, it used to work normally on localhost then when published this happened, so I created a personal access token, it wasn't about an issue with passport prerequisites, thanks a lot!

I had the same issue today, stumped me for quite a while before I found this GitHub issue. Shouldn't this case be caught and show a special error instead of this super vague error? I bet a lot of people wasted time on this. A generating the token is a requirement, then test for the requirement ;)

I'm having the same issue, but creating personal access client didn't solve it for me.

Unfortunately same with @nospoon. So far tried removing vendor & re-install via composer, and reprovisioned whole local env via docker, still the issue persists. Funnily enough works on our Ubuntu based CI-server & all non-Mac using colleagues' PCs.

Actually, my issue turned out to be the fact I was running it in test environment, which didn't have the personal access client in it. Adding the command to add the client to my test's setUp method solved the issue.

First verify whether "oauth_clients" table is empty, If there is no row in that table, Run this command in your command line: php artisan passport:install

the following commands solved my problem:
1- for migration
php artisan migrate:refresh

2- php artisan passport install
or use
php artisan passport:client --personal as stated by lonewolfffff above.

php artisan migrate
then don't forget to
php artisan passport:install
will create the encryption keys needed to generate secure access tokens. In addition, the command will create "personal access" and "password grant" clients which will be used to generate access tokens:

The command php artisan passport:install --force works indeed, however I ended up adding a seeder in order to keep the client secret constant, this saves time updating it on the client during development.

php artisan make:seeder OAuthSeeder

My run method contains the following:

   DB::table('oauth_clients')->insert([
        'id' => 1,
        'name' => 'Laravel Personal Access Client',
        'secret' => 'yoursecret',
        'redirect' => 'http://localhost',
        'personal_access_client' => 1,
        'password_client' => 0,
        'revoked' => 0,
        'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
        'updated_at' => Carbon::now()->format('Y-m-d H:i:s')
    ]);

    DB::table('oauth_clients')->insert([
        'id' => 2,
        'name' => 'Laravel Password Grant Client',
        'secret' => 'yoursecret',
        'redirect' => 'http://localhost',
        'personal_access_client' => 0,
        'password_client' => 1,
        'revoked' => 0,
        'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
        'updated_at' => Carbon::now()->format('Y-m-d H:i:s')
    ]);

    DB::table('oauth_personal_access_clients')->insert([
        'id' => 1,
        'client_id' => 1,
        'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
        'updated_at' => Carbon::now()->format('Y-m-d H:i:s')
    ]);

Don't forget to add: use Carbon\Carbon;. I copied the data that was seeded by php artisan passport:install --force. So now I can just run php artisan migrate:refresh --seed without breaking authentication. Hope it helps.

TL;DR> Call the passport:install command instead of manually inserting static secrets.

I would personally object to storing secrets like that in a Seeder. Not only would you enter a key into a source repository, but the developers that use the code will not know that they should 'Change All The Keys'.

Having Passport (or Laravel) complain or otherwise bork is a generally a good idea, because it forces a developer to generate new certificates, clients and secrets. If you really, really want to have a fresh set of keys, clients and secrets, everytime you do a make migrate:fresh --seed, I would simply do it like this:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Artisan;

class OAuthSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Artisan::call('passport:install');
    }
}

Please use the install instructions. They'll guide you through the process of having a personal client in your DB. A PR was also merged recently which will make this error more clear.

Was this page helpful?
0 / 5 - 0 ratings