Tengo una URL de token de actualización como esta client.com/api//auth/refresh-token . pero me cuesta mucho usar esto. Creo que debería guardar un token de actualización en el almacenamiento local después del inicio de sesión. pero como puedo usarlo
iniciar sesión.tsx
export const useLogin = () => { const LoginAuth = async (data: AuthenticationProps) => { await axios.post(baseURL + `client/auth/login`, { email: data.email, password: data.password, }, { headers: { "Content-Type": "application/json", Accept: "application/json", } } ) .then((res) => { if(res.status === 200) { console.log("success") } }, (err) => { console.log(err); }) } return { LoginAuth, } }Guárdelo en el almacenamiento local
export const storeToken = async (token: string) => { await AsyncStorage.setItem('@token', token); };Y recuperar del almacenamiento cuando sea necesario
export const getToken = async () => { return await AsyncStorage.getItem('@token'); };Probablemente debería obtener el token del almacenamiento cuando se inicia la aplicación o cuando se obtiene de la API y almacenarlo en estado o similar mientras usa la aplicación.
Guardar en almacenamiento web
Solo las cadenas se pueden almacenar en el almacenamiento web
Persiste incluso cuando el navegador se cierra y se vuelve a abrir.
const token = localStorage.getItem('token'); localStorage.setItem('token', 'value')Datos eliminados cuando se cierra el navegador
sessionStorage.getItem('token', 'value') sessionStorage.setItem('token', 'value')No debe configurar el token de actualización en el almacenamiento local, causaría una vulnerabilidad de seguridad, ya que javascript puede acceder al almacenamiento local, y dado que el token de actualización es un token a largo plazo (vive más tiempo que el token de acceso), lo que haría es almacenar Acceda al token en el almacenamiento local, ya que el token de acceso es un token a corto plazo, el almacenamiento en el almacenamiento local o las cookies está totalmente bien, y luego debe hacer una llamada useEffect () en reaccionar, que verifica cada vez que el token ha caducado y luego realiza la llamada, un pequeño ejemplo:
import Cookies from 'js-cookie'; axios.get("ur_url_here/",data,{headers:{"Content-Type": "application/json",Accept: "application/json"}}).then((res)=>{ Cookies.set(res.data.access) // assuming the response has the access token })) // now we check the expiration of access token useEffect(()=>{ if(!(Cookies.get("access"){ axios.get("refresh_url_here/",{headers:{"Content-Type": "application/json",Accept: "application/json"}}).then((res)=>{ Cookies.set(res.data.access) }) /*what you do here, is try to have a resource/view in your backend that has the refresh token and make request to it so that it gives you a new access token, because refresh token should be in cookies tagged with `httponly', then you can send the access token to client side as a response and set it somewhere. */ } else{ //do something else } })este es un código simplificado, pero debería explicar bien la idea de actualizar un token de forma segura.
también tenga en cuenta que almacené el acceso en cookies, pero puede hacer lo mismo y almacenarlo en el almacenamiento local.