After I log in the state of isAuthenticated is true but when I refresh the state change to false !
so what is the best solution to keep isAuthenticated to true after I log in ?
in AuthService the code is :
const Axios = require('axios');
export default {
isAuthenticated: () => {
return Axios({
url: 'http://localhost:4000/user/authenticated',
method: 'GET',
})
.then((res) => {
if (res.status !== 401) return res.json().then((data) => data);
else
return {
isAuthenticated: false,
user: {
firstName: ' ',
lastName: ' ',
email: ' ',
},
};
})
.catch((err) => {
console.log('isAuthenticated err :' + err);
return {
isAuthenticated: false,
user: {
firstName: ' ',
lastName: ' ',
email: ' ',
},
};
});
},
};
and in AuthContext:
import React, { createContext, useState, useEffect } from 'react';
import AuthService from '../Services/AuthService';
export const AuthContext = createContext();
export default ({ children }) => {
const [user, setUser] = useState(null);
const [isAuthenticated, setIsAuthenticated] = useState(false);
const [isLoaded, setIsLoaded] = useState(false);
useEffect(() => {
AuthService.isAuthenticated().then((data) => {
console.log('is authenticated :' + data.isAuthenticated);
setUser(data.user);
setIsAuthenticated(data.isAuthenticated);
setIsLoaded(true);
});
}, []);
return (
<div>
{!isLoaded ? (
<h1>Loading</h1>
) : (
<AuthContext.Provider value={{ user, setUser, isAuthenticated, setIsAuthenticated }}>
{children}
</AuthContext.Provider>
)}
</div>
);
};
and in index.js I wrapped the app between Auth provider
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import 'bootstrap/dist/css/bootstrap.css';
import AuthProvider from './context/AuthContext';
ReactDOM.render(
<AuthProvider>
<React.StrictMode>
<App />
</React.StrictMode>
</AuthProvider>,
document.getElementById('root'),
);
and here is the app.js:
import React, { useContext } from 'react';
import Navigation from './components/Navigation';
import Home from './components/Home';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Dashboard from './components/user/Dashboard';
function App() {
const { isAuthenticated } = useContext(AuthContext);
return (
<Router>
{isAuthenticated ? (
<Switch>
<Route path="/dashboard" component={Dashboard} />
</Switch>
) : (
<div className="App">
<Navigation />
<Switch>
<Route path="/" exact component={Home} />
<Route path="/produit" component={Produit} />
</Switch>
</div>
)}
</Router>
);
}
export default App;