fix(next): prevent locale upsert when not authenticated (#13621)

### What?

When `?locale=` is present in an admin panel URL and that admin panel
URL is visited in an unauthenticated browser, a runtime error is thrown.

### Why?

`upsertPreferences` relies on `req.user` to successfully create a new
`payload-preferences` document. When an unauthenticated user visits a
URL with a `locale` parameter, `upsertPreferences` is called but
`req.user` is not available.

### How?

Prevent `upsertPreferences` from being called when `req.user` is not
available.

Fixes #13581

Co-authored-by: Patrik Kozak <35232443+PatrikKozak@users.noreply.github.com>
This commit is contained in:
Riley Langbein
2025-10-03 05:56:01 +09:30
committed by GitHub
parent d826159fc0
commit ece5a95f64

View File

@@ -13,7 +13,7 @@ export async function getRequestLocale({ req }: GetRequestLocalesArgs): Promise<
if (req.payload.config.localization) {
const localeFromParams = req.query.locale as string | undefined
if (localeFromParams) {
if (req.user && localeFromParams) {
await upsertPreferences<Locale['code']>({ key: 'locale', req, value: localeFromParams })
}