اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم،

أريد إنشاء مسار محمي protected route باستخدام react-router-dom وتخزين الاستجابة في localStorage، بحيث يمكن للمستخدم عرض تفاصيله عندما يحاول فتح التطبيق في المرة القادمة، بعد تسجيل الدخول، مع توجيه المستخدم إلى صفحة اللوحة (dashboard).

وذلك من خلال الإصدار 6 من react-router-dom، فكيف أقوم بذلك؟ مع شرح الطريقة لو سمحتم.

حاليًا لدي الكود التالي في ملف التوجيه:

import React, { useContext } from "react";
import { globalC } from "./context";
import { Route, Switch, BrowserRouter } from "react-router-dom";
import About from "./About";
import Dashboard from "./Dashboard";
import Login from "./Login";
import PageNotFound from "./PageNotFound";

function Routes() {
  const { authLogin } = useContext(globalC);
  console.log("authLogin", authLogin);

  return (
    <BrowserRouter>
      <Switch>
        {authLogin ? (
          <>
            <Route path="/dashboard" component={Dashboard} exact />
            <Route exact path="/About" component={About} />
          </>
        ) : (
          <Route path="/" component={Login} exact />
        )}

        <Route component={PageNotFound} />
      </Switch>
    </BrowserRouter>
  );
}
export default Routes;

 

تم التعديل في بواسطة Abdelrahman Mostafa10

Recommended Posts

  • 0
نشر

 

أولاً نحتاج دالة لتحقق حالة تسجيل الدخول authentication state:

function useAuth() {
  const [auth, setAuth] = useState(null);

  useEffect(() => {
    const storedAuth = localStorage.getItem('auth');
    setAuth(storedAuth);
  }, [])

  return auth;
}

ثم سنستخدم هذه الدالة في المكون Routes: 

function Routes() {
  const auth = useAuth();

  return (
    <BrowserRouter>
      <Switch>
        {auth && <Route path="/dashboard" component={Dashboard}/>}
        
        <Route path="/login" component={Login}/>  
      </Switch>
    </BrowserRouter>
  )
}

و في مكون التسجيل login عند نجاح التسجيل نخزن الحالة في localStorage:

localStorage.setItem('auth', true);

و في مكون تسجيل الخروج logout نمحي الحالة من localStorage: 

localStorage.removeItem('auth');

بهذه الطريقة سوف يتم عرض المسار المحمي عند وجود الحالة في localStorage، وعند الخروج سيتم إزالتها.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...