Say the user is already logged in and redirected to home page again if he modifies the url to navigate to login page it should not do go back to login.
Login.js
const [loginUser, { data, isLoading, isError }] = useLoginUserMutation();
useEffect(() => {
if (data?.response === "true" && data?.state === "success"){
setErrorMsg("");
setEmail("");
setPassword("");
setIsAuthenticated(true);
navigate("/home", { state: { user: data?.user } });
}
else if (data?.response === "false" && data.state === "error"){
setErrorMsg(true);
}
else{
setErrorMsg(false)
}
}, [data,isError,isLoading]);
const handleLogin = async (e) => {
e.preventDefault();
console.log("****")
await loginUser({email,password})
}
App.js
function App() {
const [isAuthenticated, setIsAuthenticated] = useState(false);
const handleLogin = () => {
setIsAuthenticated(true);
}
return (
<div className="App">
<Router>
<Routes>
<Route exact path="/">
<Login onLogin={handleLogin} />
</Route>
<ProtectedRoute path="/home" component={Home} isAuthenticated=
{isAuthenticated}/>
</Routes>
</Router>
</div>
);
}
export default App;
protectedRoute.js
import React from "react";
import { Navigate,Outlet } from "react-router-dom";
const ProtectedRoute = ( {isAuthenticated}) => {
return isAuthenticated? <Outlet /> : <Navigate to="/" />;
}
export default ProtectedRoute;
UserApi
import{createApi,fetchBaseQuery} from'@reduxjs/toolkit/query/react'
export const authApi = createApi({
reducerPath: 'authApi',
baseQuery: fetchBaseQuery({ baseUrl: "http://localhost:8100" }),
endpoints: (builder) => ({
loginUser: builder.mutation({
query: (body) => {
return {
url: "users/authenticate",
method: "post",
body,
};
},
transformResponse: (response) => {
const { response: resp, state, user } = response;
return { response: resp, state: state, user: user };
},
}),
}),
});
export const { useLoginUserMutation } = authApi;
enter code here
I tried persisting the state Auth with local storage, since data wont be available it shows undefined/null.
const isAuthenticated = localStorage.getItem('data');
if (isAuthenticated) {
setAuthenticationStatus(true);
since I am using Redux Toolkit I am not sure if I have to use localStorage to persist the data.
Any solution would be appreciated
first render localhost:3000(loginPage) After successfull LoggedIn localhost:3000/home Manually i change the URL: localhost:3000/ it comes back to login page