Browse Source

fix token login

amenpunk 2 years ago
parent
commit
43013a857c

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

102
 
102
 
103
           <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
103
           <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
104
             <TextField
104
             <TextField
105
+              fullWidth
105
               type="email"
106
               type="email"
106
               label="Correo Electronico"
107
               label="Correo Electronico"
107
               {...getFieldProps('mail')}
108
               {...getFieldProps('mail')}

+ 11 - 39
src/Components/PrivateRoute.js

1
 import { Navigate, useLocation } from 'react-router-dom';
1
 import { Navigate, useLocation } from 'react-router-dom';
2
 import { useSelector } from 'react-redux';
2
 import { useSelector } from 'react-redux';
3
-import jwt_decode from "jwt-decode";
4
 
3
 
5
-const Recluter = {
6
-  authorities: "Reclutador",
7
-  app_name: 'Dashboard',
8
-  type: 1
9
-}
4
+export function RequireUserToken({ children }) {
5
+
6
+  let token = useSelector((state) => state.token.candi)
7
+  let location = useLocation();
10
 
8
 
11
-const User = {
12
-  authorities: "User",
13
-  app_name: 'User',
14
-  type: 2
9
+  if (!token) {
10
+    return <Navigate to="/logincd" state={{ from: location }} replace />;
11
+  }
12
+
13
+  return children;
15
 }
14
 }
16
 
15
 
16
+
17
 export function RequireToken({ children }) {
17
 export function RequireToken({ children }) {
18
 
18
 
19
   let token = useSelector((state) => state.token.token)
19
   let token = useSelector((state) => state.token.token)
20
   let location = useLocation();
20
   let location = useLocation();
21
-  let app_name = children?.type?.name
22
 
21
 
23
   if (!token) {
22
   if (!token) {
24
-    if (app_name === Recluter.app_name) {
25
-      return <Navigate to="/login" state={{ from: location }} replace />;
26
-    } else {
27
-      return <Navigate to="/logincd" state={{ from: location }} replace />;
28
-    }
29
-  } else {
30
-
31
-    let body_token = jwt_decode(token);
32
-    let token_access = body_token?.authorities;
33
-
34
-    if (app_name === User.app_name) {
35
-      let valid_user = token_access.includes(User.authorities);
36
-      if (!valid_user) {
37
-        return <Navigate to="/logincd" state={{ from: location }} replace />;
38
-      } else {
39
-        return children;
40
-      }
41
-    }
42
-
43
-    if (app_name === Recluter.app_name) {
44
-      let valid_user = token_access.includes(Recluter.authorities);
45
-      if (!valid_user) {
46
-        return <Navigate to="/logincd" state={{ from: location }} replace />;
47
-      } else {
48
-        return children;
49
-      }
50
-    }
51
-
23
+    return <Navigate to="/login" state={{ from: location }} replace />;
52
   }
24
   }
53
 
25
 
54
   return children;
26
   return children;

+ 8 - 10
src/Components/Routes.js

22
 
22
 
23
 import { HomeUser } from '../Pages/HomeUser'
23
 import { HomeUser } from '../Pages/HomeUser'
24
 import { Prueba } from '../Pages/Prueba.jsx'
24
 import { Prueba } from '../Pages/Prueba.jsx'
25
-import { RequireToken } from '../Components/PrivateRoute'
25
+import { RequireToken, RequireUserToken } from '../Components/PrivateRoute'
26
 
26
 
27
 export default function MyRoutes() {
27
 export default function MyRoutes() {
28
 
28
 
38
       <Route
38
       <Route
39
         path="user"
39
         path="user"
40
         element={
40
         element={
41
-          <RequireToken>
42
-            <User/>
43
-          </RequireToken>
44
-        }
45
-      >
41
+          <RequireUserToken>
42
+            <User />
43
+          </RequireUserToken>
44
+        } >
46
         <Route path="home" element={<HomeUser />} />
45
         <Route path="home" element={<HomeUser />} />
47
         <Route path="prueba">
46
         <Route path="prueba">
48
-          <Route path=":id" element={<Prueba/>}/>
49
-          <Route path="" element={<Prueba/>}/>
47
+          <Route path=":id" element={<Prueba />} />
48
+          <Route path="" element={<Prueba />} />
50
         </Route>
49
         </Route>
51
       </Route>
50
       </Route>
52
 
51
 
57
           <RequireToken>
56
           <RequireToken>
58
             <Dashboard />
57
             <Dashboard />
59
           </RequireToken>
58
           </RequireToken>
60
-        }
61
-      >
59
+        }>
62
         <Route path="home" element={<Home />} />
60
         <Route path="home" element={<Home />} />
63
         <Route path="puestos" element={<Puestos />} />
61
         <Route path="puestos" element={<Puestos />} />
64
         <Route path="perfil" element={<Profile />} />
62
         <Route path="perfil" element={<Profile />} />

+ 3 - 3
src/Pages/HomeUser.jsx

10
 
10
 
11
   const [tests, setTests] = useState([]);
11
   const [tests, setTests] = useState([]);
12
   const [password, setPasword] = useState({});
12
   const [password, setPasword] = useState({});
13
-  const token = useSelector( state => state.token.token);
13
+  const auth = useSelector( state => state.token.candi);
14
   const profile = useSelector( state => state.user.profile);
14
   const profile = useSelector( state => state.user.profile);
15
 
15
 
16
   useEffect(() => {
16
   useEffect(() => {
17
     let { email , password} = profile
17
     let { email , password} = profile
18
     let rest = new Service(`/plaza/contrasenia/${password}/${email}`);
18
     let rest = new Service(`/plaza/contrasenia/${password}/${email}`);
19
     rest
19
     rest
20
-      .get(token.token)
20
+      .get(auth.token)
21
       .then(({ data }) => {
21
       .then(({ data }) => {
22
         console.log('plaza contrasenia: ', data)
22
         console.log('plaza contrasenia: ', data)
23
         setTests(data.tests)
23
         setTests(data.tests)
28
         console.error("ERR : ", erro)
28
         console.error("ERR : ", erro)
29
       })
29
       })
30
 
30
 
31
-  },[token, profile])
31
+  },[auth, profile])
32
 
32
 
33
   return(
33
   return(
34
     <div className="content-section">
34
     <div className="content-section">

+ 6 - 6
src/Pages/Logincs.jsx

41
   const dispatch = useDispatch();
41
   const dispatch = useDispatch();
42
   const handleClose = () => false
42
   const handleClose = () => false
43
   const navigate = useNavigate();
43
   const navigate = useNavigate();
44
-  let token = useSelector((state) => state.token.token)
44
+  let auth = useSelector((state) => state.token.candi)
45
 
45
 
46
   React.useEffect(() => {
46
   React.useEffect(() => {
47
-    if(token){
48
-      let body_token = jwt_decode(token);
49
-      if(body_token.authorities.includes("User")){
47
+    if(auth){
48
+      let body_token = jwt_decode(auth.token);
49
+      if(body_token.authorities.includes("Candidato")){
50
         navigate('/user/home')
50
         navigate('/user/home')
51
       }
51
       }
52
     }
52
     }
53
-  }, [token, navigate])
53
+  }, [auth, navigate])
54
 
54
 
55
 
55
 
56
   const formik = useFormik({
56
   const formik = useFormik({
96
             setOpen(false)
96
             setOpen(false)
97
             dispatch(setRole(body_token))
97
             dispatch(setRole(body_token))
98
             dispatch(setProfile(profile))
98
             dispatch(setProfile(profile))
99
-            dispatch(setToken({ token : token, exp : exp_in }))
99
+            dispatch(setToken({ token : token, exp : exp_in, candi : true }))
100
           }, 2000)
100
           }, 2000)
101
 
101
 
102
         })
102
         })

+ 1 - 1
src/Pages/Prueba.jsx

13
 export function Prueba() {
13
 export function Prueba() {
14
 
14
 
15
   let { id } = useParams();
15
   let { id } = useParams();
16
-  let auth = useSelector((state) => state.token.token)
16
+  let auth = useSelector((state) => state.token.candi)
17
   let profile = useSelector((state) => state.user)
17
   let profile = useSelector((state) => state.user)
18
   let dispatch = useDispatch();
18
   let dispatch = useDispatch();
19
 
19
 

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

41
 export function Cleaver() {
41
 export function Cleaver() {
42
 
42
 
43
   let { id } = useParams();
43
   let { id } = useParams();
44
-  const auth = useSelector((state) => state.token.token);
44
+  const auth = useSelector((state) => state.token.candi);
45
   const cleaver = useSelector((state) => state.cleaver);
45
   const cleaver = useSelector((state) => state.cleaver);
46
   const role = useSelector((state) => state.user.role);
46
   const role = useSelector((state) => state.user.role);
47
   let navigate = useNavigate()
47
   let navigate = useNavigate()

+ 7 - 2
src/Slices/tokenSlice.js

1
 import { createSlice } from '@reduxjs/toolkit';
1
 import { createSlice } from '@reduxjs/toolkit';
2
-const initialState = { token : null, exp : 0 };
2
+const initialState = { token: null, candi: 0 };
3
 
3
 
4
 export const tokenSlice = createSlice({
4
 export const tokenSlice = createSlice({
5
   name: "token",
5
   name: "token",
6
   initialState,
6
   initialState,
7
   reducers: {
7
   reducers: {
8
     setToken: (state, action) => {
8
     setToken: (state, action) => {
9
-      state.token = action.payload;
9
+      let { payload } = action
10
+      if (payload.candi) {
11
+        state.candi = action.payload
12
+      }else{
13
+        state.token = action.payload;
14
+      }
10
     },
15
     },
11
     removeToken: (state, _action) => {
16
     removeToken: (state, _action) => {
12
       state.token = null;
17
       state.token = null;