← Back to React Course | Chapter 8: Routing | Lesson 8 of 10

Protected/Private Routes बनाना

एक protected route एक club door पर एक bouncer जैसा है — यह check करता है कि आपको अंदर जाने की allowed है या नहीं इससे पहले कि आपको अंदर क्या है वह दिखाए, और अगर नहीं तो आपको कहीं और भेज देता है।
Syntax
markup
function RequireAuth({ children }) {
  if (!isLoggedIn) return <Navigate to="/login" replace />;
  return children;
}

<Route path="/private" element={<RequireAuth><PrivatePage /></RequireAuth>} />

एक RequireAuth Wrapper बनाना

एक RequireAuth component check करता है कि user authenticated है या नहीं, और या तो इसके children (protected page) render करता है या कहीं और redirect करता है।

इस component में एक Route के element को wrap करना protected pages तक direct URL access block करता है, सिर्फ इनका link hide करने के बजाय।

Note: Auth check को ही (isLoggedIn) एक single shared जगह रखें, जैसे एक Context, ताकि RequireAuth और app का बाकी हिस्सा current status पर agree करें।
Warning: एक protected page का nav link hide करना असली protection नहीं है — कोई भी अब भी URL directly type कर सकता है जब तक route खुद auth check न करे।

उदाहरण: Building a RequireAuth Wrapper

markup
// Run in your local React project (npm install required)
import { Navigate } from 'react-router-dom';

function RequireAuth({ isLoggedIn, children }) {
  if (!isLoggedIn) return <Navigate to="/login" replace />;
  return children;
}

⚠️ This example uses an npm package with no CDN build available here — run this in your local React project.

Declarative Redirects के लिए Navigate उपयोग करना

Navigate component एक redirect करता है इसके render होने वाली चीज़ के हिस्से के रूप में, useNavigate() जैसा एक imperative function call करने के बजाय। <Navigate to='/login' /> render करना immediately browser को /login पर redirect कर देता है — RequireAuth wrapper जैसे conditional JSX के अंदर useful।

Note: Navigate पर replace prop उन redirects (जैसे auth checks) के लिए उपयोग करें जिन्हें browser history में एक phantom entry नहीं छोड़नी चाहिए।
Warning: Navigate हर render पर एक redirect cause करता है जहां इसकी condition true हो — यह सुनिश्चित करें कि surrounding condition इसे सिर्फ actually needed होने पर render करे।

उदाहरण: Using Navigate for Declarative Redirects

markup
// Run in your local React project (npm install required)
import { Routes, Route, Navigate } from 'react-router-dom';

function Dashboard({ isLoggedIn }) {
  if (!isLoggedIn) return <Navigate to="/login" />;
  return <p>Welcome to your dashboard</p>;
}

⚠️ This example uses an npm package with no CDN build available here — run this in your local React project.

Route Tree में एक Protected Route Wrap करना

RequireAuth को अपने route definitions के साथ combine करने का मतलब है एक protected page के element को Route declaration में सीधे <RequireAuth>...</RequireAuth> में wrap करना।

यह auth check को routing configuration के साथ colocated रखता है, एक नज़र में देखना आसान कि कौन से routes protected हैं।

Note: कई protected routes के लिए, एक parent RequireAuth route के नीचे उनके पूरे group को wrap करना consider करें nested routes उपयोग करके, हर single एक पर wrapper repeat करने के बजाय।
Warning: isLoggedIn असली, verified state से आना चाहिए (जैसे एक token check), सिर्फ एक client-side flag से नहीं जिसे trivially spoof किया जा सके।

उदाहरण: Wrapping a Protected Route in the Route Tree

markup
// Run in your local React project (npm install required)
import { Routes, Route } from 'react-router-dom';

function RequireAuth({ isLoggedIn, children }) {
  return isLoggedIn ? children : <p>Redirecting to login...</p>;
}
function Dashboard() { return <p>Protected dashboard content</p>; }

function AppRoutes({ isLoggedIn }) {
  return (
    <Routes>
      <Route path="/dashboard" element={<RequireAuth isLoggedIn={isLoggedIn}><Dashboard /></RequireAuth>} />
    </Routes>
  );
}

⚠️ This example uses an npm package with no CDN build available here — run this in your local React project.

Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. सिर्फ एक protected page का link hide करना, इसमें direct URL access को actually block किए बिना।
  2. Protected content briefly render होने के बाद authentication status check करना, private content का एक flash cause करते हुए।
  3. Originally-requested URL preserve करना भूल जाना, ताकि user login करने के बाद वहीं वापस land करे।
चैप्टर सारांश
  • एक protected route इसके element को एक check में wrap करता है जो unauthenticated users को कहीं और redirect करता है।
  • यह आमतौर पर render करने से पहले एक boolean (जैसे isLoggedIn) check करने वाले एक छोटे wrapper component के रूप में बनाया जाता है।
  • Navigate component declaratively एक redirect perform करता है, एक component जो render करता है उसके हिस्से के रूप में।
  • असली security को अब भी server-side checks चाहिए — client-side route protection सिर्फ UI control करता है।
ब्राउज़र सपोर्ट

npm install react-router-dom चाहिए — इस sandbox में CDN से available नहीं।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.