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