# Laravel JWT: Tymon\JWTAuth\Exceptions\TokenExpiredException: Token has expired / The token could not be parsed from the request

**Code:** `Token has expired (tymon/jwt-auth)` · **Category:** Laravel · **Seen on:** Laravel, PHP

A JWT sent by the client is expired, invalid or absent, so `jwt-auth` rejects the request.

## Meaning

Tokens have a TTL (`JWT_TTL`, default 60 minutes). Refresh before expiry using the refresh endpoint (`JWT_REFRESH_TTL` window), or re-login. "Could not be parsed" means the `Authorization: Bearer` header is missing or malformed (some servers strip it — Apache needs `RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]`).

## Common causes

- Token older than JWT_TTL
- Refresh window also expired
- Authorization header stripped by Apache/FastCGI
- Clock skew between servers
- JWT_SECRET changed

## Quick fix

1. Refresh the token: `auth()->refresh()` before expiry
2. Pass `Authorization: Bearer <token>` exactly
3. Pass the header through in `.htaccess`

## Detailed fix by platform

### Apache

1. `.htaccess`: `RewriteCond %{HTTP:Authorization} .` then `RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]`

## How to diagnose

1. **Age** — Token vs TTL?
2. **Header** — Reaches PHP?
3. **Secret** — Unchanged?

---
Source: [WhatIsMyError](https://whatismyerror.com/errors/laravel/jwt-token-expired)
