Skip to content

LivePreview breaks visit of website if token gets old for the current user #11912

@waldemar-p

Description

@waldemar-p

Bug description

Using the live preview is fine until the token is older then (I think) one hour.
Visiting that site (or any other) after this time will lead to a 404-error with this error code:

[2025-07-01 06:45:07] production.ERROR: Call to a member function repository() on null {"exception":"[object] (Error(code: 0): Call to a member function repository() on null at /var/www/statamic-cms/vendor/statamic/cms/src/Tokens/Handlers/LivePreview.php:18)

This error is only resolved if a new token is generated. That (probably) only happens if we call a new live preview.

How to reproduce

  1. Live preview a page
  2. Visit that page via URL
  3. Wait >1 hour
  4. Refresh the page that you visited via URL
  5. you now get a 404 response

Logs

[2025-07-01 06:45:07] production.ERROR: Call to a member function repository() on null {"exception":"[object] (Error(code: 0): Call to a member function repository() on null at /var/www/statamic-cms/vendor/statamic/cms/src/Tokens/Handlers/LivePreview.php:18)
[stacktrace]
#0 /var/www/statamic-cms/vendor/statamic/cms/src/Tokens/Token.php(59): Statamic\\Tokens\\Handlers\\LivePreview->handle()
#1 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/HandleToken.php(18): Statamic\\Tokens\\Token->handle()
#2 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\HandleToken->handle()
#3 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/RequireStatamicPro.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#4 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\RequireStatamicPro->handle()
#5 /var/www/statamic-cms/vendor/statamic/cms/src/GraphQL/Middleware/CacheResponse.php(13): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#6 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\GraphQL\\Middleware\\CacheResponse->handle()
#7 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#8 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#9 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#10 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#11 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#12 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#13 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#14 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/StopImpersonating.php(12): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#15 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\StopImpersonating->handle()
#16 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/DisableFloc.php(17): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#17 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\DisableFloc->handle()
#18 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/CheckMultisite.php(15): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#19 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\CheckMultisite->handle()
#20 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/CheckComposerJsonScripts.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\CheckComposerJsonScripts->handle()
#22 /var/www/statamic-cms/vendor/statamic/cms/src/Http/Middleware/PoweredByHeader.php(18): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Statamic\\Http\\Middleware\\PoweredByHeader->handle()
#24 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#26 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#27 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#29 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#30 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#32 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#34 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php(49): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\HandleCors->handle()
#36 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#37 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#38 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#40 /var/www/statamic-cms/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#41 /var/www/statamic-cms/public/index.php(51): Illuminate\\Foundation\\Http\\Kernel->handle()
#42 {main}
"}

Environment

Environment
Application Name: Actiware
Laravel Version: 10.48.25
PHP Version: 8.2.15
Composer Version: 2.7.1
Environment: production
Debug Mode: ENABLED
URL: cmsapi.actiware.de
Maintenance Mode: OFF

Cache
Config: CACHED
Events: NOT CACHED
Routes: CACHED
Views: CACHED

Drivers
Broadcasting: log
Cache: file
Database: mysql
Logs: stack / single
Mail: smtp
Queue: sync
Session: file

Statamic
Addons: 2
Sites: 2 (Deutsch, Schweizerdeutsch)
Stache Watcher: Disabled
Static Caching: half
Version: 5.58.1 PRO

Statamic Addons
aerni/font-awesome: 3.0.2
teamnovu/graphql-breadcrumbs: 1.0.7

Installation

Fresh statamic/statamic site via CLI

Additional details

I have played around a bit and one thing that would resolve this is adding

if (!$item) {
    return $next($request);
}

before src/Tokens/Handlers/LivePreview.php:18.

But I am unsure if that would lead to any sideeffects I am unaware of.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions