Creé un servidor de autorización con Express.js que funciona cuando se prueba con Postman, donde guarda el acceso y el token de actualización giratorio como cookies firmadas. Sin embargo, lo que olvidé por completo fue que mi backend y frontend son dos servidores y dominios completamente separados. Intenté habilitar Access-Control-Allow-Credentials , pero eso no funcionó. No recibo ningún mensaje de error, las cookies simplemente no se guardan.
Aquí está mi controlador de inicio de sesión desde el backend:
const userLogin = async (req, res, next) => { const { email, password } = req.body; if (!email || !password) return res.sendStatus(400); try { const login = await loginUser(email, password); if (login == 'wrong_email_or_password') return res.status(200).json({ error: login }); res.header('Access-Control-Allow-Credentials', true); res.cookie('access', login.accessToken, { httpOnly: true, secure: (env != 'dev'), signed: true }); res.cookie('refresh', login.refreshToken, { httpOnly: true, secure: (env != 'dev'), signed: true }); res.status(200).json(login); } catch(e) { console.log(e.message); res.sendStatus(500) && next(); } } Y después de encontrar algunos problemas de CORS, también hice app.use(cors({ origin: true, credentials: true })); , que resolvió el problema. Para la producción, probablemente también agregaré una lista blanca de CORS.
Y aquí está mi método Nuxt.js que se llamará al enviar el formulario de registro:
async register () { try { if (!(this.firstname && this.lastname && this.username && this.email && this.password)) throw new Error('Pflichtfelder ausfüllen') const res = await axios.post(`${this.$axios.defaults.baseURL}register`, { firstname: this.firstname, lastname: this.lastname, username: this.username, email: this.email, password: this.password }, { withCredentials: true, credentials: 'include' }) console.log(res) this.$router.go() } catch (e) { this.error = e.message console.error(e) } }Desearía poder proporcionar más información útil además de "no funciona, ayuda, por favor", pero como dije, no obtengo ningún error, así que realmente ni siquiera sé dónde buscar. :(
Muy bien, parece que lo que estoy tratando de hacer es imposible. Las cookies provenientes de dominios de terceros no están permitidas, lo cual tiene sentido ahora que lo pienso...
Para cualquier persona interesada, mi solución es simplemente guardar ambos tokens en localStorage . Como estoy usando tokens de actualización rotativos, esto no es gran cosa.