Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

239
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda