Created
May 15, 2018 22:49
-
-
Save NicholasKuchiniski/f3b8ff919d8697ee637177e307186ff6 to your computer and use it in GitHub Desktop.
Exemplo de uso da lib 'react-router-with-props' para determinar o acesso a uma rota que necessita de autentificação.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React, { Component } from 'react'; | |
import { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom'; | |
import { PrivateRoute } from 'react-router-with-props'; | |
class App extends Component { | |
state = { | |
// Verifica se o item 'token' existe no localStorage | |
// e utiliza o Boolean() para, caso o resulado seja null ou undefined, transforme em false. | |
// caso o valor exista o resultado vai ser true | |
authed: Boolean(localStorage.getItem('token')) | |
}; | |
// O estado não é alterado quando um item é removido do localStorage, portanto criamos uma função | |
// que verifica novamente o localStorage e retorna true ou false, para o estado authed. | |
setAuthed = () => { | |
this.setState({ | |
authed: Boolean(localStorage.getItem('token')) | |
}); | |
} | |
// Função de login; | |
login = () => { | |
/* | |
Aqui pode vir uma requisição | |
*/ | |
localStorage.setItem('token', "XXX-XXX-XXX-XXX"); | |
this.setAuthed(); | |
}; | |
// Função de logout | |
// Simplesmente removemos o localStorage e chamamos a função que verifica ele e determina o estado (authed) | |
logout = () => { | |
localStorage.removeItem('token'); | |
this.setAuthed(); | |
} | |
render() { | |
const { authed } = this.state; | |
return ( | |
<div className="App"> | |
<Router> | |
<Switch> | |
{ | |
/* Utiliza o componente PrivateRoute para determinar que essa é uma rota que só pode ser acessada | |
por usuarios autenticados | |
*/ | |
} | |
<PrivateRoute | |
exact path="/" | |
authed={ | |
// utiliza o estado authed, para dizer se o usuario está autenticado ou não. | |
authed | |
} | |
// Redireciona o usuario para /401, caso ele não esteja autenticado | |
redirectTo="/401" | |
component={ | |
() => <div> | |
Você está autorizado! <br /> | |
Seu token de acessó é {localStorage.getItem('token')} | |
<p /> | |
<button onClick={this.logout}>Sair</button> | |
</div> | |
} | |
/> | |
<Route | |
path="/401" | |
component={() => | |
<div> | |
Você não está autorizado! | |
<br /> | |
<button onClick={this.login}>Iniciar sessão</button> | |
<p /> | |
{ | |
authed && | |
<div> | |
Você está autorizado! Volte para página principal. | |
<br /> | |
<Link to="/">Voltar</Link> | |
</div> | |
} | |
</div>} | |
/> | |
</Switch> | |
</Router> | |
</div> | |
); | |
} | |
} | |
export default App; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment