瀏覽代碼

token auth route fix

amenpunk 3 年之前
父節點
當前提交
f9b638b990
共有 3 個文件被更改,包括 50 次插入5 次删除
  1. 42 3
      src/Components/PrivateRoute.js
  2. 4 1
      src/Pages/Login.jsx
  3. 4 1
      src/Pages/Logincs.jsx

+ 42 - 3
src/Components/PrivateRoute.js

@@ -1,15 +1,54 @@
 import { Navigate, useLocation } from 'react-router-dom';
-// import useAuth from '../Auth/useAuth';
 import { useSelector } from 'react-redux';
+import jwt_decode from "jwt-decode";
+
+const Recluter = {
+  authorities: "Reclutador",
+  app_name: 'Dashboard',
+  type: 1
+}
+
+const User = {
+  authorities: "User",
+  app_name: 'User',
+  type: 2
+}
 
 export function RequireToken({ children }) {
 
   let token = useSelector((state) => state.token.token)
   let location = useLocation();
+  let app_name = children?.type?.name
 
   if (!token) {
-    console.log('falta authorizacion user')
-    return <Navigate to="/logincd" state={{ from: location }} replace />;
+    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 children;

+ 4 - 1
src/Pages/Login.jsx

@@ -96,7 +96,10 @@ export function Login() {
   
   React.useEffect(() => {
     if(auth.token){
-      navigate('/dashboard/home')
+      let body_token = jwt_decode(auth.token);
+      if(body_token.authorities.includes("Reclutador")){
+        navigate('/dashboard/home')
+      }
     }
   }, [auth, navigate])
 

+ 4 - 1
src/Pages/Logincs.jsx

@@ -45,7 +45,10 @@ export function LoginCs() {
 
   React.useEffect(() => {
     if(token){
-      navigate('/user/home')
+      let body_token = jwt_decode(token);
+      if(body_token.authorities.includes("User")){
+        navigate('/user/home')
+      }
     }
   }, [token, navigate])