Estoy tratando de obtener la información del usuario actual usando el token jwt después de iniciar sesión correctamente, el token se guarda en el navegador, pero cada vez que envío la solicitud aparece un error
token que obtengo en la pestaña de mi aplicación en mi consola
token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiI2MjM4NzA4ZDc2ZDVkMDJmZWMwNGRiZDEiLCJpYXQiOjE2NDgwODI3MTV9.xvFdGR8skZntTIdlo9aSCx90315rSoUxct_VIR9cf6Qerror que recibo en mi consola cuando estoy en la ruta del usuario
{ "success": false, "message": "Failed to authenticate" }mi etiqueta de script para obtener la información del usuario actual
<script> import axios from "axios"; export default { name: "HelloWorld", data() { return { msg: "Welcome to Your Vue.js App" }; }, mounted() { axios .get("http://localhost:5000/api/auth/user", { headers: { Authorization: "Bearer ${token}", token: localStorage.getItem("token") } }) .then(res => { console.log(res); }); } }; </script>ruta de back-end para la autenticación
router.get("/auth/user", verifyToken, async (req, res) => { try { let foundUser = await User.findOne({ _id: req.decoded._id }).populate( "address" ); if (foundUser) { res.json({ success: true, user: foundUser }); } } catch (err) { res.status(500).json({ success: false, message: err.message }); } });jwt middleware para verificar el token
const jwt = require("jsonwebtoken"); module.exports = function (req, res, next) { let token = req.headers["x-access-token"] || req.headers["authorization"]; let checkBearer = "Bearer "; if (token) { if (token.startsWith(checkBearer)) { token = token.slice(checkBearer.length, token.length); } jwt.verify(token, process.env.SECRET, (err, decoded) => { if (err) { console.log(err) res.json({ success: false, message: "Failed to authenticate" }); } else { req.decoded = decoded; next(); } }); } else { res.json({ success: false, message: "No token Provided" }); } };no entiendo por qué recibo un error cuando mi token se guarda en mi almacenamiento local
deberías ver tu token en la consola.
si no ves, no guardaste correctamente. debe verificar su método de guardado.
<script> import axios from "axios"; export default { name: "HelloWorld", data() { return { msg: "Welcome to Your Vue.js App" }; }, mounted() { let token=localStorage.getItem("token"); console.log(token); axios .get("http://localhost:5000/api/auth/user", { headers: { Authorization: `Bearer ${token}`, token: token } }) .then(res => { console.log(res); }); } }; </script>y arreglé su método de middleware. para obtener token, puede dividir el carácter de espacio y tomar el último índice.
const autheticateToken = (req, res, next) => { var authHeader = req.headers.authorization; const token = authHeader?.split(' ')[1]; if (token === null) { return res.json({ success: false, message: "Failed to authenticate" }); } JWT.verify(token, process.env.SECRET, (err, decoded) => { if (err) { return res.json({ success: false, message: "Failed to authenticate" }); } req.decoded = decoded; next(); }); }