[SOLVED] Argument 1 passed to Tymon\JWTAuth\JWT::fromUser() must be an instance of Tymon\JWTAuth\Contracts\JWTSubject

Step 1. Go to config/app.php and add

Tymon\JWTAuth\Providers\LaravelServiceProvider::class

to Providers.

Step 2. In your terminal publish the config file: 

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 

and add it to your list service providers in app.php

Step 3. In your terminal generate the secret: 

php artisan jwt:secret

Step 4. In config/auth.php – set the default guard to api, and change the api driver to jwt

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],
'guards' => [
    ...

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

Step 5. In your User Model you need to implement the Tymon\JWTAuth\Contracts\JWTSubject contract on your User model, which requires to implement the 2 methods getJWTIdentifier() and getJWTCustomClaims(). See Below

public  function  getJWTIdentifier() {
        return  $this->getKey();
    }