Actualmente estoy diseñando un sitio web simple, donde los usuarios pueden iniciar sesión como un usuario normal o como administrador. En este momento, estoy codificando la parte para cuando el usuario quiera ir a una página web solo para administradores, y el servidor recuperará el token jwt almacenado en el almacenamiento local en el navegador web para validarlo.
Así es como se ve el almacenamiento local
Aquí está el código para recuperar el token jwt
var verifyFn = { verifyToken: function (req, res, next) { const authHeader = localStorage.getItem("jwt_token"); console.log("THIS IS THE HEADER") console.log(authHeader) if (authHeader === null || authHeader === undefined ){ return res.status(401).send({ message: 'not authenticated BEARER TOKEN ISSUE' }); } const token = authHeader console.log("NEW TOKEN") console.log(token) jwt.verify(token, config.jwt.secret, { algorithms: ['HS256'] }, (err, decoded) => { if (err) return res.status(401).send({ message: 'not authenticated' }); req.decodedToken = decoded; console.log("DECODED TOKEN: " + req.decodedToken) next(); }); }Sin embargo, cada vez que intento ejecutar el servidor y navego a la página de administración, aparece un error que dice "el almacenamiento local no está definido". Como tal, no estoy seguro de cómo puedo recuperar el jwt_token desde el navegador web hasta el back-end del servidor.
Un servidor no tiene acceso al objeto localStorage del navegador, ya que solo se puede acceder a él desde el cliente y no existe en el contexto del servidor.
Lo que se suele hacer es enviar el token en una cabecera de Authorization . Parece que está usando Node , así que considere la siguiente solicitud de ejemplo usando la API de búsqueda en el cliente:
const jwtToken = localStorage.getItem('jwt_token') fetch('your-api-url', { method: 'request method here', headers: { Authorization: `Bearer ${jwtToken}` }, body: JSON.stringify(your request body here) }).then(response => ...)En el servidor, puede obtener el token JWT mirando los encabezados de solicitud, algo como esto:
var verifyFn = { verifyToken: function (req, res, next) { let authHeader = req.headers['Authorization'] // the auth header will have Bearer prepended, so remove it authHeader = authHeader.replace('Bearer ', '') console.log("THIS IS THE HEADER") console.log(authHeader) if (authHeader === null || authHeader === undefined ){ return res.status(401).send({ message: 'not authenticated BEARER TOKEN ISSUE' }); } const token = authHeader console.log("NEW TOKEN") console.log(token) jwt.verify(token, config.jwt.secret, { algorithms: ['HS256'] }, (err, decoded) => { if (err) return res.status(401).send({ message: 'not authenticated' }); req.decodedToken = decoded; console.log("DECODED TOKEN: " + req.decodedToken) next(); }); }