Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When user is not logged in redirect to login. Reactjs [duplicate]

My App looks like:

class App extends Component {   render() {     <Router>       <div>       <Route exact path='/login' component={Login} />       <Route exact path='/game' component={GameContainer} />       <Route exact path='/chat' component={ChatContainer} />       <Route exact path='/info' component={InfoContainer} />     </div>     </Router>     } 

If the user visits a page under /game and is not logged in, I want to redirect them to the login page.

How to do it an elegant way in all routers?

like image 776
Ivan Hreskiv Avatar asked Nov 24 '17 15:11

Ivan Hreskiv


People also ask

How do I redirect a login page in react JS?

Redirect User to Login Page Using Navigateimport { Navigate } from "react-router-dom"; To redirect unauthenticated users, use it as follows. The Navigate component is a declarative API. It relies on a user event, which in this case is authentication to cause a state change and consequently cause a component re-render.

How do you handle redirects in react?

The Redirect component was usually used in previous versions of the react-router-dom package to quickly do redirects by simply importing the component from react-router-dom and then making use of the component by providing the to prop, passing the page you desire to redirect to.

How do I stop a browser from going back to login form page once user is logged in?

I succeeded in preventing my website from going back to the login page by pressing the back button using history.


1 Answers

See this answer https://stackoverflow.com/a/43171515/208079. Perhaps someone with more rep than me can mark this as a duplicate.

The basic idea is to wrap routes that require authentication with a custom component (PrivateRoute in the example below). PrivateRoute will use some logic to determine if the user is authenticated and then either; allow the requested route to render, or redirect to the login page.

This is also described in the react-router training docs at this link https://reacttraining.com/react-router/web/example/auth-workflow.

Here is an implementation using the above as inspiration.

In App.js (or where your routing is happening)

import React, { Component } from 'react' import { BrowserRouter as Router, Route } from 'react-router-dom' import PrivateRoute from './PrivateRoute' import MyComponent from '../src/MyComponent' import MyLoginForm from '../src/MyLoginForm'  <Router>   <Route path="/login" component={MyLoginForm} />   <PrivateRoute path="/onlyAuthorizedAllowedHere/" component={MyComponent} /> </Router> 

And the PrivateRoute Component

// This is used to determine if a user is authenticated and // if they are allowed to visit the page they navigated to.  // If they are: they proceed to the page // If not: they are redirected to the login page. import React from 'react' import AuthService from './Services/AuthService' import { Redirect, Route } from 'react-router-dom'  const PrivateRoute = ({ component: Component, ...rest }) => {    // Add your own authentication on the below line.   const isLoggedIn = AuthService.isLoggedIn()    return (     <Route       {...rest}       render={props =>         isLoggedIn ? (           <Component {...props} />         ) : (           <Redirect to={{ pathname: '/login', state: { from: props.location } }} />         )       }     />   ) }  export default PrivateRoute 
like image 78
bluesixty Avatar answered Sep 21 '22 00:09

bluesixty