Fix login issues
This commit is contained in:
@@ -5,15 +5,14 @@ import { useNavigate } from "react-router";
|
|||||||
|
|
||||||
|
|
||||||
export default function LogoutPage(){
|
export default function LogoutPage(){
|
||||||
const { setJwt, setExpiration } = useAuth();
|
const { reset } = useAuth();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
|
||||||
const logout = async () => {
|
const logout = async () => {
|
||||||
const response = await api.get("/auth/logout");
|
const response = await api.get("/auth/logout");
|
||||||
if(response.status === 200){
|
if(response.status === 200){
|
||||||
setJwt(null);
|
reset();
|
||||||
setExpiration(null);
|
|
||||||
navigate("/");
|
navigate("/");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { Link, Navigate, useNavigate } from "react-router";
|
|||||||
|
|
||||||
|
|
||||||
export default function LoginPage(){
|
export default function LoginPage(){
|
||||||
const { jwt, setJwt } = useAuth();
|
const { jwt, setTokenData } = useAuth();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { addSuccessMessage, addErrorMessage } = useTimedModal();
|
const { addSuccessMessage, addErrorMessage } = useTimedModal();
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ export default function LoginPage(){
|
|||||||
if(response.status === 200){
|
if(response.status === 200){
|
||||||
addSuccessMessage("Logged in successfully");
|
addSuccessMessage("Logged in successfully");
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
setJwt(json.token);
|
setTokenData(json);
|
||||||
navigate("/raidGroup");
|
navigate("/raidGroup");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ type AuthProviderState = {
|
|||||||
raidGroupRequests: RaidGroupRequest[];
|
raidGroupRequests: RaidGroupRequest[];
|
||||||
tutorialsStatus: AccountTutorialStatus;
|
tutorialsStatus: AccountTutorialStatus;
|
||||||
setTutorialsStatus: (tutorialsStatus: AccountTutorialStatus) => void;
|
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 = {
|
const initialState: AuthProviderState = {
|
||||||
@@ -40,7 +44,9 @@ const initialState: AuthProviderState = {
|
|||||||
gamePermissions: [],
|
gamePermissions: [],
|
||||||
raidGroupRequests: [],
|
raidGroupRequests: [],
|
||||||
tutorialsStatus: {} as AccountTutorialStatus,
|
tutorialsStatus: {} as AccountTutorialStatus,
|
||||||
setTutorialsStatus: () => null
|
setTutorialsStatus: () => null,
|
||||||
|
reset: () => null,
|
||||||
|
setTokenData: () => null
|
||||||
}
|
}
|
||||||
|
|
||||||
const AuthContext = createContext<AuthProviderState>(initialState);
|
const AuthContext = createContext<AuthProviderState>(initialState);
|
||||||
@@ -64,14 +70,10 @@ export function AuthProvider({
|
|||||||
const { mutate: tutorialsStatusMutation } = useUpdateTutorialsStatus();
|
const { mutate: tutorialsStatusMutation } = useUpdateTutorialsStatus();
|
||||||
|
|
||||||
|
|
||||||
const fetchToken = useCallback(async () => {
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
//console.log("Fetching token");
|
const setTokenData = useCallback((data: any) => {
|
||||||
try{
|
setJwt(data.token);
|
||||||
const response = await api.get("/auth/refresh");
|
const decodedToken = JSON.parse(atob(data.token.split(".")[1]));
|
||||||
//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]));
|
|
||||||
//console.log("decodedToken = ");
|
//console.log("decodedToken = ");
|
||||||
//console.log(decodedToken);
|
//console.log(decodedToken);
|
||||||
setExpiration(new Date(decodedToken.exp * 1000));
|
setExpiration(new Date(decodedToken.exp * 1000));
|
||||||
@@ -81,6 +83,16 @@ export function AuthProvider({
|
|||||||
setRaidGroupPermissions(JSON.parse(decodedToken.raidGroupPermissions));
|
setRaidGroupPermissions(JSON.parse(decodedToken.raidGroupPermissions));
|
||||||
setGamePermissions(JSON.parse(decodedToken.gamePermissions));
|
setGamePermissions(JSON.parse(decodedToken.gamePermissions));
|
||||||
setRaidGroupRequests(JSON.parse(decodedToken.raidGroupRequests));
|
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;
|
return response.data.token;
|
||||||
}
|
}
|
||||||
//If the token cannot be retrieved
|
//If the token cannot be retrieved
|
||||||
@@ -96,7 +108,7 @@ export function AuthProvider({
|
|||||||
setExpiration(null);
|
setExpiration(null);
|
||||||
setFirstFetch(false);
|
setFirstFetch(false);
|
||||||
}
|
}
|
||||||
}, [ setJwt, setExpiration, setFirstFetch ]);
|
}, [ setJwt, setExpiration, setFirstFetch, setTokenData ]);
|
||||||
|
|
||||||
|
|
||||||
//Add the token to all queries
|
//Add the token to all queries
|
||||||
@@ -135,6 +147,17 @@ export function AuthProvider({
|
|||||||
tutorialsStatusMutation(newTutorialsStatus);
|
tutorialsStatusMutation(newTutorialsStatus);
|
||||||
}, [ setTutorialsStatus, tutorialsStatusMutation ]);
|
}, [ 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(() => ({
|
const currentTokens = useMemo(() => ({
|
||||||
jwt, setJwt,
|
jwt, setJwt,
|
||||||
@@ -144,8 +167,9 @@ export function AuthProvider({
|
|||||||
raidGroupPermissions,
|
raidGroupPermissions,
|
||||||
gamePermissions,
|
gamePermissions,
|
||||||
raidGroupRequests,
|
raidGroupRequests,
|
||||||
tutorialsStatus, setTutorialsStatus: updateTutorialsStatus
|
tutorialsStatus, setTutorialsStatus: updateTutorialsStatus,
|
||||||
}), [ jwt, expiration, accountId, accountPermissions, raidGroupPermissions, gamePermissions, raidGroupRequests, tutorialsStatus, 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
|
//TODO: Return a spinner while the first token is being fetched
|
||||||
|
|||||||
Reference in New Issue
Block a user