Actualización de sesión en NextAuth

힘센캥거루
2025년 10월 20일(수정됨)
3
88

Aunque había muchos artículos sobre la implementación de inicio de sesión, había pocos sobre la actualización de la información de la sesión.

Así que aquí va un intento de documentar la actualización de la sesión.

Nuevamente, consultaremos la documentación oficial de NextAuth.

Actualización de sesión en NextAuth-1

El orden de actualización de la información de la sesión es el siguiente.

  1. Actualización y activación de la sesión con update de useSession

  2. Reconfiguración del jwt según el activador en authConfig

  3. Actualizar la página después de la actualización

Veamos primero el código.

1. Actualización de la sesión

El ejemplo en la documentación oficial es el siguiente.

import { useSession } from "next-auth/react";

export default function Page() {
  const { data: session, status, update } = useSession();

  if (status === "authenticated") {
    return (
      <>
        <p>Signed in as {session.user.name}</p>
        // Enviar valores de actualización al lado del servidor
        <button onClick={() => update({ name: "John Doe" })}>Edit name</button>
        // Suponga que ya ha actualizado los valores en el servidor. Solo ejecuta el activador. // Todos
        `useSession().data` es actualizado.
        <button onClick={() => update()}>Edit name</button>
      </>
    );
  }

  return <a href="/api/auth/signin">Sign in</a>;
}

Si solo quieres hacerlo de manera sencilla, agrega un objeto como parámetro a update.

Lo apliqué a mi sitio web.

Reducí y comenté los códigos innecesarios.

"use client";

import { useSession } from "next-auth/react";
import { useRouter } from "next/navigation";

export default function Profile() {
  const router = useRouter();
  const { update } = useSession();

  async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {
    e.preventDefault();

    // Crear datos de formulario e inyectar datos
    const formData = new FormData();
    formData.append("nickName", value);

    // Actualización del backend a través de fetch de API
    const res = await fetch("/api/editProfile", {
      method: "POST",
      body: formData,
    });
    const resJson = await res.json();

    // Si tiene éxito, actualiza la sesión con update y ejecuta el activador
    if (resJson.success === "success") {
      // Crear datos estructurados como objeto y actualizar.
      const updateObj: Record<string, string | boolean> = {};
      userInputTable.forEach((each: userInputTableObj) => {
        updateObj[each.name] = each.value as string;
      });

      // Esperar actualización antes de actualizar la página
      await update(updateObj);

      // Actualización de navbar con la actualización de sesión
      router.refresh();
    }
  }
  return (
    <form onSubmit={(e) => handleSubmit(e)}>
      <input
        // userInput.value está configurado aproximadamente con useState
        value={userInput.value}
        onChange={(e) => handleChange(e)}
      />
        <button type="submit">Registrarse</button>
    </form>
  );
}

La clave es actualizar la información de la sesión con un objeto en update.

Renovemos el token con la sesión actualizada.

2. AuthOptions

La documentación oficial básicamente lo describe de la siguiente manera.

Entre los parámetros de NextAuth, se proporciona una opción jwt a través de callbacks.

Cuando ocurre un activador de actualización y session.name está presente, se actualiza el token.

...
export default NextAuth({
  // omitido ...
  callbacks: {
    jwt({ token, trigger, session }) {
        // La sesión puede ser un objeto arbitrario, por lo que se necesita verificación.
      if (trigger === "update" && session?.name) {
        token.name = session.name
      }
      return token
    }
  }
})

No hubo mucho que cambiar, así que lo apliqué tal como estaba.

Ahora, la actualización de la sesión ha terminado.

3. Probar

Actualización de sesión en NextAuth-2

Probemos cambiando el apodo del perfil después de iniciar sesión.

Cambié el apodo para verificar si el perfil del navbar implementado con SSR cambiaba correctamente.

Parece funcionar bien.

4. Conclusión

Actualización de sesión en NextAuth-3

La actualización de la sesión fue más fácil de implementar de lo esperado.

Busqué mucho, pero al final siempre vuelvo a la documentación oficial.

Si algo no funciona bien, recomiendo leer la documentación oficial detenidamente.

관련 글

공문서 완전 자동화 해보기 - ChatGPT, Claude, kordoc + python-hwpx
공문서 완전 자동화 해보기 - ChatGPT, Claude, kordoc + python-hwpx
대한민국 공공기관은 여전히 .hwp 확장자를 가진 파일을 많이 사용한다.이 파일은 한글과컴퓨터에서 만든 독자 규격 문서다.문제는 이 형식이 다른 프로그램과 완전히 호환되지 않는다는 데 있다.문서를 열어보는 것은 가능하다.하지만 그 내용을 구조적으로 읽고, 데이터처럼 활...
Relato del desarrollo de un blog full‑stack con Next.js
Relato del desarrollo de un blog full‑stack con Next.js
Alrededor de un año después de empezar con el desarrollo web, empecé a pensar que quería tener mi propio blog.Así que estuve dedicado a esto durante u...
Despliegue sin interrupciones de Nextjs (servidor local) usando Caddy
Despliegue sin interrupciones de Nextjs (servidor local) usando Caddy
Cada vez que me entraban ganas de seguir añadiendo cosas a la página web, hacía un build, y en ese intervalo parece que había gente que se conectaba d...
Automatización de la indexación de búsqueda de Google - Web Search Indexing API
Automatización de la indexación de búsqueda de Google - Web Search Indexing API
Después de IndexNow, decidí probar también la automatización con Google.Buscando un poco, vi que Google ofrecía algo llamado Web Search Indexing a tra...
Automatizar la creación de índices de búsqueda - IndexNow
Automatizar la creación de índices de búsqueda - IndexNow
Mientras estaba registrando el sitio en Bing, me enteré de que Bing ofrece una función llamada IndexNow.Lo esencial es que, usando una clave de API, p...
Experiencia de que hackearan mi servidor Nextjs y React
Experiencia de que hackearan mi servidor Nextjs y React
La primera vez que me encontré con este problema de seguridad fue la madrugada del 5 de diciembre.Que en React era posible ejecutar código de forma re...

댓글을 불러오는 중...