Search code examples
phplaravelfirebasefirebase-authentication

The token was issued in the future - Laravel Firebase


I'm using react.js as fron-end & laravel for creating API's for web app

in react.js i'm using firebase to get googleAuth then sending it Laravel App in Laravel i'm using "kreait/laravel-firebase": "^5.7",

SocialRegister is working fine for me in Laravel side

When i'm trying to log user in using the code below

  try {
        /** @var FirebaseAuth $firebaseAuth */
        $firebaseAuth = app(FirebaseAuth::class);

        // Verify the ID token
        $verifiedIdToken = $firebaseAuth->verifyIdToken($request->access_token);

        // Extract claims from the verified ID token
        $uid = $verifiedIdToken->claims()->get('sub');
        $userEmail = $verifiedIdToken->claims()->get('email');

        // Check if the user already exists in your database
        $existingUser = AppUser::where('email', $userEmail)->first();

        if ($existingUser) {
            // User already exists, return an error or handle it as per your requirements
            return $this->sendresponse('false', 'user already exists', null);
        }


        $user = AppUser::create([
            "email" => $request->email,
            "name" => $request->name,
            "access_token" => $uid, // Save Firebase UID for future reference
        ]);


        // Return success response
        return $this->sendresponse('true', 'user registered successfully', ['user' => $user]);
    } catch (\Throwable $e) {
        // Handle registration errors
        return $this->sendresponse('false', 'registration error', $e->getMessage());
    }

`

Then i'm getting this error

The value 'eyJhbGciOiJSUzI...' is not a verified ID token: - - The token was issued in the future

I even tried changing timezone of my laravel app but it didn't worked


Solution

  • This problem occurs when there is a clock skew between the signing server (Firebase) and the verifying server (your server or local computer).

    In that case, you can provide a leeway in seconds to allow a token to be expired:

    $leewayInSeconds = 360; // 5 minutes
    
    $verifiedIdToken = $firebaseAuth
        ->verifyIdToken($request->access_token, $leewayInSeconds);