Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

238
Vistas
express-session/cors/Axios devuelve 401 (no autorizado)

ACTUALIZACIÓN: aparentemente funciona en Firefox, estaba usando Brave. ¿Supongo que está bloqueando la cookie con la sesión? No sé qué hacer al respecto.


Estoy creando una aplicación con Vue, conectándome a través de Axios a una API hecha con express.

Estoy tratando de usar la sesión rápida para administrar las sesiones de inicio de sesión y la autenticación. En mi localhost funciona muy bien, pero cuando traté de usarlo desde el sitio alojado en heroku, se estropeó. El middleware que verifica si la sesión tiene una propiedad de usuario bloquea la llamada.

Estoy bastante seguro de que tiene que ver con https en lugar de http. Lo probé en localhost https con algunas credenciales generadas y se rompió de la misma manera.

El punto final para el inicio de sesión es bastante largo, pero básicamente verifica si la contraseña que le dio es correcta y, si lo es, establece req.session.usuario en un objeto con algunos datos de usuario. Después de eso, cuando vuelvo a verificar la sesión, el usuario no está configurado.

El software intermedio CORS:

 const cors = require("cors"); const whitelist = ["https://localhost:8080", "https://hosted-client.herokuapp.com"]; const corsOptions = { credentials: true, origin: (origin, callback) => { if (whitelist.includes(origin)) return callback(null, true); //callback(new Error("CORS error")); callback(null, true); }, }; module.exports = cors(corsOptions);

El middleware de sesión:

 const Redis = require("ioredis"); const connectRedis = require("connect-redis"); const session = require("express-session"); const RedisStore = connectRedis(session); const redisClient = new Redis( process.env.REDIS_PORT, process.env.REDIS_HOST, {password: process.env.REDIS_PASSWORD} ); module.exports = session({ store: new RedisStore({ client: redisClient }), secret: process.env.SECRET, saveUninitialized: false, resave: process.env.STATE_ENV === "production", proxy: true, cookie: { secure: process.env.STATE_ENV === "production", httpOnly: true, sameSite: "none", // maxAge: 1000 * 60 * 30, // 30 minutos }, });

Un middleware de autenticación de prueba simple:

 module.exports = function (req, _, next) { if (!req.session || !req.session.usuario) { const err = new Error("No se encontró una sesión"); err.statusCode = 401; next(err); } next(); }

La instancia de Axios en el cliente:

 require("dotenv").config(); import axios from "axios"; export default axios.create({ baseURL: process.env.VUE_APP_API, headers: { "Content-type": "application/json", }, withCredentials: true, });

No estoy seguro si eso es suficiente información, si no házmelo saber.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda