RevalidateTag() запускается после действия сервера, но auth() по-прежнему возвращает устаревший сеанс в RSCJavascript

Форум по Javascript
Ответить
Anonymous
 RevalidateTag() запускается после действия сервера, но auth() по-прежнему возвращает устаревший сеанс в RSC

Сообщение Anonymous »

Я использую маршрутизатор приложений Next.js 16 со следующей аутентификацией v5.
Внутри моих серверных компонентов React я читаю сеанс, используя:

Код: Выделить всё

const session = await auth();
Я обновляю пользовательские данные (которые существуют в полезных данных сеанса) внутри действия сервера и после мутации запускаю:

Код: Выделить всё

revalidateTag("user");
Мой пользовательский поиск кэшируется следующим образом:

Код: Выделить всё

export const getUser = unstable_cache(
async () => {
const session = await auth();
return session?.user;
},
["user"],
{ tags: ["user"] }
);
Проблема
  • после успешной мутации
  • после вызова revalidateTag("user")
  • а также после перехода на другой маршрут
RSC по-прежнему получают старые данные сеанса от auth().
База данных обновлено правильно, но auth(), похоже, разрешает устаревший кеш.
Единственное решение, которое это исправляет:

Код: Выделить всё

export const dynamic = "force-dynamic";
Но это отключает потоковую передачу и кэширование для всего макета.
Вопросы
  • Кешируется ли auth() для каждого запроса таким образом, чтобы это не становилось недействительным с помощью revalidateTag()?
  • Если да, то каков рекомендуемый способ обеспечить свежие данные сеанса в RSC после действия сервера без принудительного динамического рендеринга?


Подробнее здесь: https://stackoverflow.com/questions/798 ... le-session
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»