Mohit
Mohit

Reputation: 137

React Router: How to change path URL when redirect to a component by typing path?

I just wanna stop the user to visit /profile page until the user logs in, if the user tries to visit the profile page by typing /profile manually into the path then he/she will redirect to /login page. So I've successfully redirected the user to the /login page but the path didn't change if they were redirected by typing /profile into the path url.

How can I change the path once the redirection is complete?

Code:-

//App.js

const [profileUser, setProfileUser] = useState();
useEffect(() => {
    auth.onAuthStateChanged((user) => {
        if (user) {
            setProfileUser(user);
        } else {
            setUserName(null);
        }
    });
    }, [profileUser]);

//JSX 
return (
        <div>
            <Header loggedUser={profileUser} />
            <MainWrapper>
                <Routes>
                    <Route path="/login" element={<Login />} />
                    <Route path="/signup" element={<SignUp />} />
                    <Route
                        path="/profile"
                        element={
                            !profileUser ? <Login /> : <Profile loggedUser={profileUser} />
                        }
                    />
                </Routes>
            </MainWrapper>
            <Footer />
        </div>
    );

Upvotes: 3

Views: 1083

Answers (2)

ClusterH
ClusterH

Reputation: 925

Simply try to add relace to="your path to need to redirect"

<Route path="/profile" element={profileUser ? <Profile loggedUser={profileUser} /> : <Navigate replace to="/login" />} />

import Navigate from 'react-router-dom'

Please check my answer here for another question regarding private routing.

Upvotes: 1

Drew Reese
Drew Reese

Reputation: 203466

You want to actually redirect to the "/login" route instead of rendering the Login component.

<Routes>
  <Route path="/login" element={<Login />} />
  <Route path="/signup" element={<SignUp />} />
  <Route
    path="/profile"
    element={profileUser
      ? <Profile loggedUser={profileUser} />
      : <Navigate to="/login" replace /> // <-- Redirect
    }
  />
</Routes>

Upvotes: 4

Related Questions