fix: Silent handling of expired auth tokens (no console error)
Some checks are pending
Deploy Elmeg / deploy (push) Waiting to run

This commit is contained in:
fullsizemalt 2025-12-23 15:40:03 -08:00
parent 14a509ddb5
commit cddd3e2389

View file

@ -1,6 +1,6 @@
"use client"
import React, { createContext, useContext, useState, useEffect } from "react"
import React, { createContext, useContext, useState, useEffect, useCallback } from "react"
import { getApiUrl } from "@/lib/api-config"
interface User {
@ -32,15 +32,33 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
const [token, setToken] = useState<string | null>(null)
const [loading, setLoading] = useState(true)
const fetchUser = useCallback(async (authToken: string): Promise<boolean> => {
const res = await fetch(`${getApiUrl()}/auth/users/me`, {
headers: {
Authorization: `Bearer ${authToken}`
}
})
if (res.ok) {
const userData = await res.json()
setUser(userData)
return true
} else if (res.status === 401 || res.status === 403) {
// Token expired or invalid - handle silently
return false
} else {
// Unexpected error
console.warn("Auth check failed with status:", res.status)
return false
}
}, [])
useEffect(() => {
const initAuth = async () => {
const storedToken = localStorage.getItem("token")
if (storedToken) {
setToken(storedToken)
try {
await fetchUser(storedToken)
} catch (err) {
console.error("Auth init failed", err)
const success = await fetchUser(storedToken)
if (!success) {
localStorage.removeItem("token")
setToken(null)
}
@ -48,21 +66,7 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
setLoading(false)
}
initAuth()
}, [])
const fetchUser = async (token: string) => {
const res = await fetch(`${getApiUrl()}/auth/users/me`, {
headers: {
Authorization: `Bearer ${token}`
}
})
if (res.ok) {
const userData = await res.json()
setUser(userData)
} else {
throw new Error("Failed to fetch user")
}
}
}, [fetchUser])
const login = async (newToken: string) => {
localStorage.setItem("token", newToken)