Créez des itinéraires sécurisés à l'aide de React-Router-Dom
P粉156983446
P粉156983446 2023-09-21 15:38:12
0
2
465

Comment utiliserreact-router-domCréez une route protégée et stockez la réponse dans localStorage afin que l'utilisateur puisse revoir ses détails la prochaine fois qu'il l'ouvrira. Après vous être connecté, vous devriez être redirigé vers la page du tableau de bord.

Toutes les fonctions sont ajoutées dans ContextApi.

Lien Codesandbox : Code

J'ai essayé mais je n'ai pas réussi à y arriver.

Page de routage

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 (   {authLogin ? ( <>    ) : (  )}    ); } export default Routes;

Page contextuelle

import React, { Component, createContext } from "react"; import axios from "axios"; export const globalC = createContext(); export class Gprov extends Component { state = { authLogin: null, authLoginerror: null }; componentDidMount() { var localData = JSON.parse(localStorage.getItem("loginDetail")); if (localData) { this.setState({ authLogin: localData }); } } loginData = async () => { let payload = { token: "ctz43XoULrgv_0p1pvq7tA", data: { name: "nameFirst", email: "internetEmail", phone: "phoneHome", _repeat: 300 } }; await axios .post(`https://app.fakejson.com/q`, payload) .then((res) => { if (res.status === 200) { this.setState({ authLogin: res.data }); localStorage.setItem("loginDetail", JSON.stringify(res.data)); } }) .catch((err) => this.setState({ authLoginerror: err }) ); }; render() { // console.log(localStorage.getItem("loginDetail")); return (  {this.props.children}  ); } }

P粉156983446
P粉156983446

répondre à tous (2)
P粉122932466

Pour la v6 :

import { Routes, Route, Navigate } from "react-router-dom"; function App() { return (  } />    } />  ); } function RequireAuth({ children, redirectTo }) { let isAuthenticated = getAuth(); return isAuthenticated ? children : ; }

Lien vers la documentation :https://gist.github.com/mjackson/d54b40a094277b7afdd6b81f51a0393f

    P粉587780103

    Question

      {authLogin ? ( <>    ) : (  )}   

    Switch不处理除RouteRedirectTout rendu en dehors du composant. Si vous vouliez « imbriquer » comme ceci, vous devrez alors envelopper chaque composant dans un itinéraire commun, mais cela est totalement inutile.

    Votre composant de connexion ne gère pas non plus la redirection vers le « domicile » ou l’itinéraire privé d’origine visité.

    Solution

    react-router-domv6

    Dans la version 6, les composants de routage personnalisés ne sont plus populaires, la méthode recommandée est d'utiliser le composant de mise en page d'authentification.

    import { Navigate, Outlet } from 'react-router-dom'; const PrivateRoutes = () => { const location = useLocation(); const { authLogin } = useContext(globalC); if (authLogin === undefined) { return null; // or loading indicator/spinner/etc } return authLogin ?  : ; }

    ...

      } > } /> } />  } /> } />  

    ou

    const routes = [ { path: "/", element: , children: [ { path: "dashboard", element: , }, { path: "about", element:  }, ], }, { path: "/login", element: , }, { path: "*", element:  }, ];

    ...

    export default function Login() { const location = useLocation(); const navigate = useNavigate(); const { authLogin, loginData } = useContext(globalC); useEffect(() => { if (authLogin) { const { from } = location.state || { from: { pathname: "/" } }; navigate(from, { replace: true }); } }, [authLogin, location, navigate]); return ( 
    ); }

    react-router-domv5

    Créez un composantPrivateRoutequi consomme votre contexte d'authentification.

    const PrivateRoute = (props) => { const location = useLocation(); const { authLogin } = useContext(globalC); if (authLogin === undefined) { return null; // or loading indicator/spinner/etc } return authLogin ? (  ) : (  ); };

    Mettez à jour votre composantLoginpour gérer les redirections de routage vers la visite d'origine.

    export default function Login() { const location = useLocation(); const history = useHistory(); const { authLogin, loginData } = useContext(globalC); useEffect(() => { if (authLogin) { const { from } = location.state || { from: { pathname: "/" } }; history.replace(from); } }, [authLogin, history, location]); return ( 
    ); }

    Rendre tous les itinéraires dans une "liste plate"

    function Routes() { return (         ); }

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!