Skip to content

Instantly share code, notes, and snippets.

@NicholasKuchiniski
Created May 15, 2018 22:49
Show Gist options
  • Save NicholasKuchiniski/f3b8ff919d8697ee637177e307186ff6 to your computer and use it in GitHub Desktop.
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.
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