Fix login issues

This commit is contained in:
2025-03-16 11:14:42 -04:00
parent fddfeaf9ca
commit 6bc38ec748
3 changed files with 43 additions and 20 deletions

View File

@@ -5,15 +5,14 @@ import { useNavigate } from "react-router";
export default function LogoutPage(){
const { setJwt, setExpiration } = useAuth();
const { reset } = useAuth();
const navigate = useNavigate();
const logout = async () => {
const response = await api.get("/auth/logout");
if(response.status === 200){
setJwt(null);
setExpiration(null);
reset();
navigate("/");
}
else{

View File

@@ -7,7 +7,7 @@ import { Link, Navigate, useNavigate } from "react-router";
export default function LoginPage(){
const { jwt, setJwt } = useAuth();
const { jwt, setTokenData } = useAuth();
const navigate = useNavigate();
const { addSuccessMessage, addErrorMessage } = useTimedModal();
@@ -28,7 +28,7 @@ export default function LoginPage(){
if(response.status === 200){
addSuccessMessage("Logged in successfully");
const json = await response.json();
setJwt(json.token);
setTokenData(json);
navigate("/raidGroup");
}
else{

View File

@@ -27,6 +27,10 @@ type AuthProviderState = {
raidGroupRequests: RaidGroupRequest[];
tutorialsStatus: AccountTutorialStatus;
setTutorialsStatus: (tutorialsStatus: AccountTutorialStatus) => void;
reset: () => void;
/* eslint-disable @typescript-eslint/no-explicit-any */
setTokenData: (data: any) => void;
/* eslint-enable @typescript-eslint/no-explicit-any */
}
const initialState: AuthProviderState = {
@@ -40,7 +44,9 @@ const initialState: AuthProviderState = {
gamePermissions: [],
raidGroupRequests: [],
tutorialsStatus: {} as AccountTutorialStatus,
setTutorialsStatus: () => null
setTutorialsStatus: () => null,
reset: () => null,
setTokenData: () => null
}
const AuthContext = createContext<AuthProviderState>(initialState);
@@ -64,14 +70,10 @@ export function AuthProvider({
const { mutate: tutorialsStatusMutation } = useUpdateTutorialsStatus();
const fetchToken = useCallback(async () => {
//console.log("Fetching token");
try{
const response = await api.get("/auth/refresh");
//If the token is retrieved
if((response.status === 200) && (!response.data.errors)){
setJwt(response.data.token);
const decodedToken = JSON.parse(atob(response.data.token.split(".")[1]));
/* eslint-disable @typescript-eslint/no-explicit-any */
const setTokenData = useCallback((data: any) => {
setJwt(data.token);
const decodedToken = JSON.parse(atob(data.token.split(".")[1]));
//console.log("decodedToken = ");
//console.log(decodedToken);
setExpiration(new Date(decodedToken.exp * 1000));
@@ -81,6 +83,16 @@ export function AuthProvider({
setRaidGroupPermissions(JSON.parse(decodedToken.raidGroupPermissions));
setGamePermissions(JSON.parse(decodedToken.gamePermissions));
setRaidGroupRequests(JSON.parse(decodedToken.raidGroupRequests));
}, [ setJwt, setExpiration, setFirstFetch, setAccountId, setAccountPermissions, setRaidGroupPermissions, setGamePermissions, setRaidGroupRequests ]);
/* eslint-enable @typescript-eslint/no-explicit-any */
const fetchToken = useCallback(async () => {
//console.log("Fetching token");
try{
const response = await api.get("/auth/refresh");
//If the token is retrieved
if((response.status === 200) && (!response.data.errors)){
setTokenData(response.data);
return response.data.token;
}
//If the token cannot be retrieved
@@ -96,7 +108,7 @@ export function AuthProvider({
setExpiration(null);
setFirstFetch(false);
}
}, [ setJwt, setExpiration, setFirstFetch ]);
}, [ setJwt, setExpiration, setFirstFetch, setTokenData ]);
//Add the token to all queries
@@ -135,6 +147,17 @@ export function AuthProvider({
tutorialsStatusMutation(newTutorialsStatus);
}, [ setTutorialsStatus, tutorialsStatusMutation ]);
const reset = useCallback(() => {
setJwt(null);
setExpiration(null);
setAccountId(null);
setAccountPermissions([]);
setRaidGroupPermissions([]);
setGamePermissions([]);
setRaidGroupRequests([]);
setTutorialsStatus({} as AccountTutorialStatus);
}, [ setJwt, setExpiration, setAccountId, setAccountPermissions, setRaidGroupPermissions, setGamePermissions, setRaidGroupRequests, setTutorialsStatus ]);
const currentTokens = useMemo(() => ({
jwt, setJwt,
@@ -144,8 +167,9 @@ export function AuthProvider({
raidGroupPermissions,
gamePermissions,
raidGroupRequests,
tutorialsStatus, setTutorialsStatus: updateTutorialsStatus
}), [ jwt, expiration, accountId, accountPermissions, raidGroupPermissions, gamePermissions, raidGroupRequests, tutorialsStatus, updateTutorialsStatus ]);
tutorialsStatus, setTutorialsStatus: updateTutorialsStatus,
reset, setTokenData
}), [ jwt, expiration, accountId, accountPermissions, raidGroupPermissions, gamePermissions, raidGroupRequests, tutorialsStatus, updateTutorialsStatus, reset, setTokenData ]);
//TODO: Return a spinner while the first token is being fetched