Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
prabhashkutti opened this issue Jun 14, 2017 · 17 comments
Closed

Comments

@prabhashkutti
Copy link

prabhashkutti commented Jun 14, 2017

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..

@alexbilbie
Copy link
Contributor

Which version of Passport are you using?

@borger
Copy link

borger commented Aug 3, 2017

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

@alexbilbie
Copy link
Contributor

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

@nfunwigabga
Copy link

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

@borger
Copy link

borger commented Aug 9, 2017

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

@lonewolfffffff
Copy link

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

@Bassem-Samy
Copy link

@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!

@ThomHurks
Copy link

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

@nospoon
Copy link

nospoon commented Dec 4, 2017

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

@appelsiini
Copy link

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.

@nospoon
Copy link

nospoon commented Dec 8, 2017

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.

@Hervera
Copy link

Hervera commented Dec 25, 2017

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

@achialandry
Copy link

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.

@RushOT
Copy link

RushOT commented May 16, 2018

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:

@mrmedicine
Copy link

mrmedicine commented Jul 3, 2018

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.

@joostjacobs
Copy link

joostjacobs commented Aug 13, 2018

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');
    }
}

@driesvints
Copy link
Member

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests