[Auth.js] ๋ก๊ทธ์ธ ์งํ useSession undefined ํ์ ํด๊ฒฐ
๋ฌธ์ ์
SessionProvider๋ก ๊ฐ์ธ๊ณ useSession์ ์ฌ์ฉํ ์ ์ต์ด ๋ก๊ทธ์ธ ์์์๋ ๋์์ผ๋ฉฐ Hard Reload ์ ๋์ํ๋ ํ์์ด ์์๋ค.
ํด๊ฒฐ์
ํด๊ฒฐํ
๋ฒ์ ์ ๋ณด
"next": "14.2.4",
"next-auth": "^5.0.0-beta.19",
ํด๊ฒฐ๋ฐฉ๋ฒ
useSession๋์ ์๋์ hook์ ์ฌ์ฉํ์ฌ ํธ์ถํ๋ค.๋งค์ฐ ๊ฐ์ฌํ๊ฒ๋ ์ ์ ๋ถ(bocarw121)๊ป์ ๋ง๋ค์ด ์ฃผ์ จ๋ค.
์๋ Github Issue ์ฐธ๊ณ - ๋ง์ ์ฌ๋๋ค์ด ๊ณ ํต๋ฐ๊ณ ์๋ค. ๊ท๋ชจ๊ฐ ์ปค์ง์ ๋ฐ๋ฅธ ์ ์ง๋ณด์๊ฐ ๋ถ์์ ํ ๋๋์ด๋ค.
use-current-session.ts
// This hook doesn't rely on the session provider
export const useCurrentSession = () => {
const [session, setSession] = useState<Session | null>(null);
// Changed the default status to loading
const [status, setStatus] = useState<string>("loading");
const pathName = usePathname();
const retrieveSession = useCallback(async () => {
try {
const sessionData = await getSession();
if (sessionData) {
setSession(sessionData);
setStatus("authenticated");
return;
}
setStatus("unauthenticated");
} catch (error) {
setStatus("unauthenticated");
setSession(null);
}
}, []);
useEffect(() => {
// We only want to retrieve the session when there is no session
if (!session) {
retrieveSession();
}
// use the pathname to force a re-render when the user navigates to a new page
}, [retrieveSession, session, pathName]);
return { session, status };
};
user-info.tsx
"use client";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { FaUser } from "react-icons/fa";
import { useCurrentUser } from "@/hooks/use-current-user";
import { RiFullscreenExitFill } from "react-icons/ri";
import { logout } from "@/actions/logout";
import { useCurrentSession } from "@/hooks/use-current-session";
export const UserButton = () => {
const { session, status } = useCurrentSession();
// const session = useCurrentUser();
return (
<DropdownMenu>
<DropdownMenuTrigger>
<Avatar className={"bg-white ring-4 ring-green-400"}>
<AvatarImage src={session?.image || ""} />
<FaUser />
<AvatarFallback>{session?.username?.slice(0, 2)}</AvatarFallback>
</Avatar>
</DropdownMenuTrigger>
<DropdownMenuContent className={"w-48"}>
<DropdownMenuItem onClick={() => logout}>
<RiFullscreenExitFill />
Log out
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
);
};
์ฐธ๊ณ ๋ฌธ์
bocarw121 - Overview
bocarw121 has 59 repositories available. Follow their code on GitHub.
github.com
https://github.com/nextauthjs/next-auth/issues/9504
useSession only getting the session after manually reloading the page · Issue #9504 · nextauthjs/next-auth
Environment System: OS: Linux 5.15 Ubuntu 22.04.3 LTS 22.04.3 LTS (Jammy Jellyfish) CPU: (6) x64 Common KVM processor Memory: 48.93 GB / 62.79 GB Container: Yes Shell: 5.1.16 - /bin/bash Binaries: ...
github.com
Authjs ํ์ต์ ๊ฐ์ถ!
https://www.youtube.com/watch?v=1MTyCvS05V4&t=28099s