소스 검색

fix token login

amenpunk 3 년 전
부모
커밋
43013a857c

+ 1 - 0
src/Components/Password/Operation.jsx

@@ -102,6 +102,7 @@ function Candidatos(props) {
 
           <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
             <TextField
+              fullWidth
               type="email"
               label="Correo Electronico"
               {...getFieldProps('mail')}

+ 11 - 39
src/Components/PrivateRoute.js

@@ -1,54 +1,26 @@
 import { Navigate, useLocation } from 'react-router-dom';
 import { useSelector } from 'react-redux';
-import jwt_decode from "jwt-decode";
 
-const Recluter = {
-  authorities: "Reclutador",
-  app_name: 'Dashboard',
-  type: 1
-}
+export function RequireUserToken({ children }) {
+
+  let token = useSelector((state) => state.token.candi)
+  let location = useLocation();
 
-const User = {
-  authorities: "User",
-  app_name: 'User',
-  type: 2
+  if (!token) {
+    return <Navigate to="/logincd" state={{ from: location }} replace />;
+  }
+
+  return children;
 }
 
+
 export function RequireToken({ children }) {
 
   let token = useSelector((state) => state.token.token)
   let location = useLocation();
-  let app_name = children?.type?.name
 
   if (!token) {
-    if (app_name === Recluter.app_name) {
-      return <Navigate to="/login" state={{ from: location }} replace />;
-    } else {
-      return <Navigate to="/logincd" state={{ from: location }} replace />;
-    }
-  } else {
-
-    let body_token = jwt_decode(token);
-    let token_access = body_token?.authorities;
-
-    if (app_name === User.app_name) {
-      let valid_user = token_access.includes(User.authorities);
-      if (!valid_user) {
-        return <Navigate to="/logincd" state={{ from: location }} replace />;
-      } else {
-        return children;
-      }
-    }
-
-    if (app_name === Recluter.app_name) {
-      let valid_user = token_access.includes(Recluter.authorities);
-      if (!valid_user) {
-        return <Navigate to="/logincd" state={{ from: location }} replace />;
-      } else {
-        return children;
-      }
-    }
-
+    return <Navigate to="/login" state={{ from: location }} replace />;
   }
 
   return children;

+ 8 - 10
src/Components/Routes.js

@@ -22,7 +22,7 @@ import { RestorePassword } from '../Pages/RestorePassword'
 
 import { HomeUser } from '../Pages/HomeUser'
 import { Prueba } from '../Pages/Prueba.jsx'
-import { RequireToken } from '../Components/PrivateRoute'
+import { RequireToken, RequireUserToken } from '../Components/PrivateRoute'
 
 export default function MyRoutes() {
 
@@ -38,15 +38,14 @@ export default function MyRoutes() {
       <Route
         path="user"
         element={
-          <RequireToken>
-            <User/>
-          </RequireToken>
-        }
-      >
+          <RequireUserToken>
+            <User />
+          </RequireUserToken>
+        } >
         <Route path="home" element={<HomeUser />} />
         <Route path="prueba">
-          <Route path=":id" element={<Prueba/>}/>
-          <Route path="" element={<Prueba/>}/>
+          <Route path=":id" element={<Prueba />} />
+          <Route path="" element={<Prueba />} />
         </Route>
       </Route>
 
@@ -57,8 +56,7 @@ export default function MyRoutes() {
           <RequireToken>
             <Dashboard />
           </RequireToken>
-        }
-      >
+        }>
         <Route path="home" element={<Home />} />
         <Route path="puestos" element={<Puestos />} />
         <Route path="perfil" element={<Profile />} />

+ 3 - 3
src/Pages/HomeUser.jsx

@@ -10,14 +10,14 @@ export function HomeUser(){
 
   const [tests, setTests] = useState([]);
   const [password, setPasword] = useState({});
-  const token = useSelector( state => state.token.token);
+  const auth = useSelector( state => state.token.candi);
   const profile = useSelector( state => state.user.profile);
 
   useEffect(() => {
     let { email , password} = profile
     let rest = new Service(`/plaza/contrasenia/${password}/${email}`);
     rest
-      .get(token.token)
+      .get(auth.token)
       .then(({ data }) => {
         console.log('plaza contrasenia: ', data)
         setTests(data.tests)
@@ -28,7 +28,7 @@ export function HomeUser(){
         console.error("ERR : ", erro)
       })
 
-  },[token, profile])
+  },[auth, profile])
 
   return(
     <div className="content-section">

+ 6 - 6
src/Pages/Logincs.jsx

@@ -41,16 +41,16 @@ export function LoginCs() {
   const dispatch = useDispatch();
   const handleClose = () => false
   const navigate = useNavigate();
-  let token = useSelector((state) => state.token.token)
+  let auth = useSelector((state) => state.token.candi)
 
   React.useEffect(() => {
-    if(token){
-      let body_token = jwt_decode(token);
-      if(body_token.authorities.includes("User")){
+    if(auth){
+      let body_token = jwt_decode(auth.token);
+      if(body_token.authorities.includes("Candidato")){
         navigate('/user/home')
       }
     }
-  }, [token, navigate])
+  }, [auth, navigate])
 
 
   const formik = useFormik({
@@ -96,7 +96,7 @@ export function LoginCs() {
             setOpen(false)
             dispatch(setRole(body_token))
             dispatch(setProfile(profile))
-            dispatch(setToken({ token : token, exp : exp_in }))
+            dispatch(setToken({ token : token, exp : exp_in, candi : true }))
           }, 2000)
 
         })

+ 1 - 1
src/Pages/Prueba.jsx

@@ -13,7 +13,7 @@ import { Loading } from '../Components/Generics/loading';
 export function Prueba() {
 
   let { id } = useParams();
-  let auth = useSelector((state) => state.token.token)
+  let auth = useSelector((state) => state.token.candi)
   let profile = useSelector((state) => state.user)
   let dispatch = useDispatch();
 

+ 1 - 1
src/Pages/Pruebas/Cleaver.jsx

@@ -41,7 +41,7 @@ const theme = createTheme({
 export function Cleaver() {
 
   let { id } = useParams();
-  const auth = useSelector((state) => state.token.token);
+  const auth = useSelector((state) => state.token.candi);
   const cleaver = useSelector((state) => state.cleaver);
   const role = useSelector((state) => state.user.role);
   let navigate = useNavigate()

+ 7 - 2
src/Slices/tokenSlice.js

@@ -1,12 +1,17 @@
 import { createSlice } from '@reduxjs/toolkit';
-const initialState = { token : null, exp : 0 };
+const initialState = { token: null, candi: 0 };
 
 export const tokenSlice = createSlice({
   name: "token",
   initialState,
   reducers: {
     setToken: (state, action) => {
-      state.token = action.payload;
+      let { payload } = action
+      if (payload.candi) {
+        state.candi = action.payload
+      }else{
+        state.token = action.payload;
+      }
     },
     removeToken: (state, _action) => {
       state.token = null;