Estou tentando fazer uma função que controla o acesso a algumas rotas React da minha aplicação.
Essa função verifica se o usuário está logado ( verifica se ele possui um token), envia uma requisição para a API com o token, verifica se o token enviado é válido ou não, e retorna uma resposta.
• Se a resposta da minha função for true (token válido), o usuário poderá acessar a rota.
• Se a resposta da minha função for false(token inválido), o usuário é redirecionado para a página de login.
Segue abaixo o código da api (instância do axios):
import axios from 'axios';
const api = axios.create({
baseURL: 'http://localhost:4000'
});
export default api;
O código da função tokenVerify():
import api from "./api"
function tokenVerify(){
const userToken = localStorage.getItem('usertoken')
if(userToken !== undefined){
api.post('/tokenverify', userToken
).then(res => {
const statusRes = res.data.status
if(statusRes === 200){
return true
}else{
return false
}
}).catch(erro => {
console.log(erro)
})
}
}
export { tokenVerify }
O código da <PrivateRoute/> (rota privada do React):
import React from "react";
import { Route } from 'react-router'
import { tokenVerify } from '../services/tokenVerify'
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route { ...rest } render={ props => (
tokenVerify() ? ( <Component { ...props }/> ) : ( window.location.replace('/') )
)}/>
)
export default PrivateRoute
E o código da rota da API de verificação do token:
const express = require('express')
const router = express.Router()
const jwt = require('jsonwebtoken');
router.post("/tokenverify", (req, res) => {
const JWTSecret = require('../app')
var reqToken = req.body.usertoken
if(reqToken != undefined){
jwt.verify(reqToken, JWTSecret, (error, data) => {
if(error){
res.status(401)
res.json('Token inválido')
}else{
res.status(200);
res.json('Deu certo')
}}
)}
})
module.exports = router;
A função tokenVerify() está sempre retornando undefined, e preciso que ela retorne true ou false. Estou tentando mas ainda não identifiquei o erro. Assisti alguns vídeos e li algumas postagens em fóruns mas ainda não consegui achar algo que me ajude.
Poderiam me ajudar?