Next.js
Session Update

Update Session

跟 strategy 用什麼有關。

https://next-auth.js.org/getting-started/client#updating-the-session (opens in a new tab)

auth.ts
  callbacks: {
    jwt: async ({ token, user, trigger, session }) => {
       // 這邊session object是從 useSession 的 update function 傳進去的東西
      if (trigger === "update") {
        token.username = session.username;
        token.unitId = session.unitId;
        return token;
      }
 
      if (user) {
        token.id = user.id;
        token.username = user.username;
        token.role = user.role;
        token.unitId = user.unitId;
        token.favorites = user.favorites;
      }
      return token;
    },
    session: ({ session, token }) => {
      session.user.id = token.id;
      session.username = token.username;
      session.role = token.role;
      session.unitId = token.unitId;
      session.favorites = token.favorites;
      return session;
    },
  },
component.ts
const { data: session, update: updateSession } = useSession();
 
const update = api.user.update.useMutation({
  onSuccess: async (values) => {
    await refetch();
    // 如果更新是自己的帳號就更新session
    if (session.user.id === item.id) {
      await updateSession({
        username: values.username,
        unitId: values.unitId,
      });
    }
    toast.success("更新帳戶資訊");
  },
});