introduce the auth provider

Šī revīzija ir iekļauta:
Sven Czarnian
2022-11-03 23:37:26 +01:00
vecāks 6ed312ea22
revīzija 34e19a5693
3 mainīti faili ar 75 papildinājumiem un 1 dzēšanām

Parādīt failu

@@ -1,18 +1,20 @@
import React from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { Auth } from './components/auth';
import { Login } from './components/login';
import { AuthProvider } from './contexts';
import './App.css';
import { Overview } from './components/overview';
const App: React.FC = () => (
<>
<BrowserRouter>
<AuthProvider>
<Routes>
<Route index element={<Login />} />
<Route path='/auth' element={<Auth />} />
<Route path='/overview' element={<Overview />} />
</Routes>
</AuthProvider>
</BrowserRouter>
</>
);

69
src/contexts/authcontext.tsx Parasts fails
Parādīt failu

@@ -0,0 +1,69 @@
import axios from 'axios';
import { createContext, Dispatch, SetStateAction, useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { Configuration } from '../services';
export interface User {
vatsimId: string;
fullName: string;
administrator: boolean;
airportConfigurationAccess: string[];
};
const AuthContext = createContext<{
auth: { valid: boolean; user: User };
setAuth: Dispatch<SetStateAction<{ valid: boolean; user: User }>>;
}>({ auth: {
valid: false,
user: {
vatsimId: '',
fullName: '',
administrator: false,
airportConfigurationAccess: [],
},
}, setAuth: () => {} });
export const AuthProvider = ({ children }: { children: any }) => {
const [auth, setAuth] = useState<{ valid: boolean; user: User }>({
valid: false,
user: {
vatsimId: '',
fullName: '',
administrator: false,
airportConfigurationAccess: [],
},
});
const navigate = useNavigate();
useEffect(() => {
axios.get<User>(`${Configuration.resourceServer}/auth/user`, {
headers: {
Authorization: `Bearer ${sessionStorage.getItem('token')}`,
},
}).then((response) => {
setAuth({ valid: true, user: response.data });
}).catch(() => {
setAuth({
valid: false,
user: {
vatsimId: '',
fullName: '',
administrator: false,
airportConfigurationAccess: [],
},
});
navigate('/');
})
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return (
<>
<AuthContext.Provider value={{ auth, setAuth }}>
{children}
</AuthContext.Provider>
</>
);
};
export default AuthContext;

3
src/contexts/index.ts Parasts fails
Parādīt failu

@@ -0,0 +1,3 @@
import AuthContext, { AuthProvider } from "./authcontext";
export { AuthContext, AuthProvider };