Função de verificação de token não retorna true ou false
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):
O código da função tokenVerify():
O código da <PrivateRoute/> (rota privada do React):
E o código da rota da API de verificação do token:
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?
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?
Israel
Curtidas 0
Respostas
Ana Gauna
22/09/2021
import api from "./api" function tokenVerify() { const userToken = localStorage.getItem(''usertoken'') const statusRes = res.data.status var check = boolean if(userToken !== undefined) { api.post(''/tokenverify'', userToken) { if(statusRes === 200) { check=true return (check); } else { check=false return (check); }} } .catch(erro => { console.log(erro) }) } } export { tokenVerify }
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'') return(); } else { res.status(200); res.json(''Deu certo'') return(); }} )} }) module.exports = router;
GOSTEI 0
Ana Gauna
22/09/2021
import api from "./api" function tokenVerify() { const userToken = localStorage.getItem(''usertoken'') const statusRes = res.data.status var check = boolean if(userToken !== undefined) { api.post(''/tokenverify'', userToken) { if(statusRes === 200) { check=true return (check); } else { check=false } return (check); } } .catch(erro => { console.log(erro) }) } } export { tokenVerify }
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'') } return(); } )} }) module.exports = router;
GOSTEI 0