Search code examples
laravel-9laravel-passportlaravel-authorizationphp-8.2

"Attempt to read property \"id\" on null", Create access token error with laravel passport, laravel 9, php 8.2.2


devs, so I have been struggling with this problem for about 10 hours now, and I can't seem to find a solution online, worst is that I don't even know why it happens. I am working on a project which uses PHP LARAVEL as the backend and I started writing the API for the flutter frontend to consume then I ran into this error while trying to test the API endpoint for registering and logging in. The problem is the process fails with this error when I try to generate or create a token for the registered user or logged-in user.

Here a snapshot of my register function

    public function store(Request $request)
    {
        $validated = Validator::make($request->all(),[
            "email" => "required|email",
            "password" => 'required',
            "first_name"=> "required",
            "last_name" => "required",
            "phone_number" => 'required',
        ]);

        if ($validated->fails()) {
            return response()->json(['errors' => "Invalide credentials"], 403);
        }

        $user = User::create(
        //     [
        //     'first_name' => $request->first_name,
        //     'last_name'=> $request->last_name,
        //     'email' => $request->email,
        //     'password' => bcrypt($request->password),
        //     'phone_number' => $request->phone_number,
        // ]
        $request->toArray()
    );

        Auth::guard('api')->check($user);

    //  $newUser = User::find($user->id);

        $token = $user->createToken('authToken')->accessToken;
        // return $token;
        return response(['token' => $token, 'first_name'=>$user->first_name, 'email'=>$user->email ], 200);
    }

The login and register functions all look the same at this point. Error-causing code is :

 $token = $user->createToken('authToken')->accessToken;

Please I am open to your suggestions, thanks.


Solution

  • I finally found a solution for this error and I believe it will help anyone out there with a similar problem. The problem originates from the fact that your application is unable to asign a unique id to your client, remember your website or mobile app is a client to the backend with also(your mobile app or website) might have other users, so laravel passport will need to identify it with a unique id, below are some of the steps i used to fix this error. First it originates because during the passport installation, i forgot to install

    Blockquote

    --uuids

    If you have a similar error, follow the steps below to fix: NOTE: You must have laravel passport installed already, if not, them follow the complete installtion guide Here

    Step 1: Install passport uuids

    php artisan passport:install --uuids
    

    Your result will look something like enter image description here

    After creating, the uuid for your application, you will have to include it in your .env file as such:

    PASSPORT_PERSONAL_ACCESS_CLIENT_ID=986eb40c-0458-4b6e-bead-ea2fc4987033
    PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=VXLdTpqWK9i3CBqFwZgje5fuerQ5Uf2lvwXJqBoP
    

    And there you go, you can now try to do what you couldn't do before.