Aprendo Santum y quiero hacer un sistema de autorización. Hice el controlador de inicio de sesión y devolvió un token, pero necesito enviar un token al servidor. Leí que la mejor manera es usar la cookie httpOnly. Mira este ejemplo
function Login () { const emailRef = useRef(), passwordRef = useRef(); const [cookies, setCookie] = useCookies(); const handleSubmit = (event) => { event.preventDefault(); instance.post('/api/auth/login', { email: emailRef.current.value, password: passwordRef.current.value }).then(res => { console.log(res.data.access_token); setCookie('Authorize', res.data.access_token, { httpOnly: true }) }) } return( <div> <form onSubmit={handleSubmit}> <input ref={emailRef} type="text" /> <input type="password" ref={passwordRef} placeholder="password" /> <button role="submit">Wyślij</button> </form> <Router> <div> <nav> <ul> <li> <Link to="/about">About</Link> </li> <li> <Link to="/me">About</Link> </li> </ul> </nav> <Switch> <Route path="/about"> <About /> </Route> </Switch> </div> </Router> </div> ); }En este ejemplo, envío una solicitud y luego obtengo un token del servidor. Entonces, ¿cómo puedo enviar una cookie en el encabezado (porque debería hacerlo para autorizar mi solicitud, verdad?)
El navegador agrega cookies a las solicitudes automáticamente, no las agrega manualmente. El navegador ahora sabrá qué cookie y cuándo agregar en función de las propiedades de esa cookie (el dominio, la ruta, si es una cookie solo segura, del mismo sitio, etc.).
Está intentando establecer una cookie de solo http. Las cookies solo HTTP son cookies a las que no se puede acceder mediante la ejecución de Javascript en el navegador. Esto significa que dichas cookies deben ser configuradas por el servidor backend y enviadas junto con la respuesta. Su Javascript en la interfaz no puede crear una cookie de solo http.
Entonces, para resolver su problema, puede probar dos soluciones:
Configure la cookie con token en el servidor (agregando un encabezado Set-Cookie a la respuesta). Entonces puede ser una cookie solo de HTTP. Se agregará automáticamente a cualquier solicitud al mismo dominio que el servidor.
Puede configurar la cookie en Javascript como lo hace ahora, pero no puede ser solo HTTP y debe agregar el parámetro de domain con el dominio del backend al que desea que se envíe la cookie.
Tenga en cuenta que la primera opción debe ser la preferida. En la segunda solución, un ataque XSS podrá leer y escribir su cookie.