fix: update session handling to refresh admin navigation after login

This commit is contained in:
2026-03-31 16:16:06 -07:00
parent 8e98ffa73d
commit 81f023317e
3 changed files with 40 additions and 11 deletions
+10 -1
View File
@@ -4,9 +4,11 @@ import Link from "next/link"
import { useRouter } from "next/navigation" import { useRouter } from "next/navigation"
import { useState } from "react" import { useState } from "react"
import { authClient } from "@/lib/auth-client" import { authClient } from "@/lib/auth-client"
import { useSession } from "@/components/SessionProvider"
export default function LoginPage() { export default function LoginPage() {
const router = useRouter() const router = useRouter()
const { refreshSession } = useSession()
const [error, setError] = useState("") const [error, setError] = useState("")
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
@@ -29,8 +31,15 @@ export default function LoginPage() {
if (result.error) { if (result.error) {
setError(result.error.message || "Failed to sign in") setError(result.error.message || "Failed to sign in")
} else { } else {
// Navigate to admin page - Better Auth will handle session update // Refresh the session after successful login
try {
await refreshSession()
} catch (err) {
console.error("Failed to refresh session:", err)
}
// Navigate to admin page
router.push("/admin") router.push("/admin")
router.refresh()
} }
} catch { } catch {
setError("An unexpected error occurred") setError("An unexpected error occurred")
+25 -6
View File
@@ -9,16 +9,29 @@ export default function Navigation() {
const { session, loading } = useSession() const { session, loading } = useSession()
const [userRole, setUserRole] = useState<string | null>(null) const [userRole, setUserRole] = useState<string | null>(null)
// Fetch user role whenever session changes
useEffect(() => { useEffect(() => {
// Fetch user role from database if session exists const fetchUserRole = async () => {
const userId = (session?.user as { id?: string })?.id const userId = (session?.user as { id?: string })?.id
if (userId) { if (userId) {
fetch(`/api/users/${userId}/role`) try {
.then(res => res.json()) const response = await fetch(`/api/users/${userId}/role`)
.then(data => setUserRole(data.role)) if (response.ok) {
.catch(() => setUserRole(null)); const data = await response.json()
setUserRole(data.role)
} else {
setUserRole(null)
} }
}, [session]); } catch {
setUserRole(null)
}
} else {
setUserRole(null)
}
}
fetchUserRole()
}, [session])
const handleLogout = async () => { const handleLogout = async () => {
await authClient.signOut() await authClient.signOut()
@@ -56,6 +69,12 @@ export default function Navigation() {
> >
Admin Admin
</Link> </Link>
<Link
href="/admin/matches"
className="border-transparent text-gray-500 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium"
>
Matches
</Link>
<Link <Link
href="/admin/players" href="/admin/players"
className="border-transparent text-gray-500 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium" className="border-transparent text-gray-500 hover:text-gray-700 inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium"
+3 -2
View File
@@ -20,7 +20,8 @@ export function SessionProvider({ children }: { children: React.ReactNode }) {
try { try {
const result = await authClient.getSession() const result = await authClient.getSession()
if (result.data) { if (result.data) {
setSession(result.data) // Create a new object reference to trigger re-renders
setSession({ ...result.data })
} else { } else {
setSession(null) setSession(null)
} }
@@ -46,7 +47,7 @@ export function SessionProvider({ children }: { children: React.ReactNode }) {
if (customEvent.detail?.session !== undefined) { if (customEvent.detail?.session !== undefined) {
// Session was updated // Session was updated
if (customEvent.detail.session) { if (customEvent.detail.session) {
setSession(customEvent.detail.session) setSession({ ...customEvent.detail.session })
} else { } else {
setSession(null) setSession(null)
} }