浏览代码

fix token login

amenpunk 2 年之前
父节点
当前提交
43013a857c

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

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

+ 11 - 39
src/Components/PrivateRoute.js

@@ -1,54 +1,26 @@
1 1
 import { Navigate, useLocation } from 'react-router-dom';
2 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 17
 export function RequireToken({ children }) {
18 18
 
19 19
   let token = useSelector((state) => state.token.token)
20 20
   let location = useLocation();
21
-  let app_name = children?.type?.name
22 21
 
23 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 26
   return children;

+ 8 - 10
src/Components/Routes.js

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

+ 3 - 3
src/Pages/HomeUser.jsx

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

+ 6 - 6
src/Pages/Logincs.jsx

@@ -41,16 +41,16 @@ export function LoginCs() {
41 41
   const dispatch = useDispatch();
42 42
   const handleClose = () => false
43 43
   const navigate = useNavigate();
44
-  let token = useSelector((state) => state.token.token)
44
+  let auth = useSelector((state) => state.token.candi)
45 45
 
46 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 50
         navigate('/user/home')
51 51
       }
52 52
     }
53
-  }, [token, navigate])
53
+  }, [auth, navigate])
54 54
 
55 55
 
56 56
   const formik = useFormik({
@@ -96,7 +96,7 @@ export function LoginCs() {
96 96
             setOpen(false)
97 97
             dispatch(setRole(body_token))
98 98
             dispatch(setProfile(profile))
99
-            dispatch(setToken({ token : token, exp : exp_in }))
99
+            dispatch(setToken({ token : token, exp : exp_in, candi : true }))
100 100
           }, 2000)
101 101
 
102 102
         })

+ 1 - 1
src/Pages/Prueba.jsx

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

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

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

+ 7 - 2
src/Slices/tokenSlice.js

@@ -1,12 +1,17 @@
1 1
 import { createSlice } from '@reduxjs/toolkit';
2
-const initialState = { token : null, exp : 0 };
2
+const initialState = { token: null, candi: 0 };
3 3
 
4 4
 export const tokenSlice = createSlice({
5 5
   name: "token",
6 6
   initialState,
7 7
   reducers: {
8 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 16
     removeToken: (state, _action) => {
12 17
       state.token = null;