Tengo mi servidor Express.js back-end que tiene función de inicio de sesión. Después de que el usuario inicie sesión, obtiene 2 tokens: token de acceso y token de actualización. Lo que quiero hacer es devolver el token de actualización del servidor como cookie httpOnly .
Aquí hay una paz de código de esta función:
const { refreshToken, accessToken } = await jwtService.updateTokens({ userId: client.id, username: client.username }, { transaction }) logger.info(`Client ${client.email} has been successfully signed in!`) await transaction.commit() return res .status(200) .cookie("refreshToken", JSON.stringify(refreshToken), { httpOnly: true, secure: false }) .json({ accessToken, reopening: reopening ? client.username : null }) Básicamente, el navegador simplemente no configura esta cookie como httpOnly y, en realidad, no la configura en absoluto. Entonces, estaba tratando de hacer ping a este punto final con el cartero, y funciona:
En el cuerpo de respuesta tengo un token de acceso y en la cookie httpOnly tengo este token de actualización.
Entonces, el problema es, ¿por qué el navegador no lo guarda? Encontré un par de soluciones y todas eran sobre credenciales cors y axios . Uso 2 servidores express : 1 es para el back-end normal y 1 es para el front-end.
Así es como se ve la "ruta" desde el front-end hasta el back-end:
Función de inicio de sesión que envía una solicitud al servidor front-end express :
const api = axios.create({ baseURL: apiUrl, headers: { 'Content-Type': 'application/json' } }) export const signIn = async payload => { try { const { data } = await api.post('s-i', payload) return data } catch (e) { return e.response.data } } El servidor front-end express envía una solicitud al back-end real:
const api = axios.create({ baseURL: process.env.NODE_ENV === "development" ? process.env.PNB_API_DEV : process.env.PNB_API_PROD, }) const router = Router() router.post('/s-i', async (req, res) => { try { const { data } = await api.post('/sign-in', req.body) res.json(data) } catch (e) { return res.status(e.response.status).json(e.response.data) } });Y luego esa función que estaba al principio.
Entonces, ¿cómo hago para que el navegador obtenga y guarde estas cookies httpOnly ? Si realmente se trata de credenciales o cors , ¿dónde debo poner esa configuración?
PD
Puerto back-end - 3001 y puerto front-end - 8010.