Fix login issues
This commit is contained in:
@@ -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{
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user