Estoy tratando de iniciar sesión en mi cuenta de usuario que está guardada en la base de datos y adjuntar un token a ese nombre de usuario con 'jwt-token'.
router.post('/users/login', (req, res) => { User.authenticate()(req.body.username, req.body.password, (err, user) => { if (err) { console.log(err) } res.json(user ? jwt.sign({ id: user._id }, process.env.SECRET) : null) }) })Sin embargo, cuando inicio sesión en la cuenta, el token se guarda como [Objeto][Objeto] en el almacenamiento local a través de esta función aquí,
// when a user clicks login const handleLogin = (event) => { event.preventDefault(); axios.post('/api/users/login', { username: userState.username, password: userState.password }).then(token => { console.log(token) setLoginState(true) localStorage.setItem('username', userState.username) localStorage.setItem('token', token) }).catch(err => { console.log(err) }) ¿Cuál es la razón por la que el token se guarda como un objeto? ¿No está siendo creado correctamente por mi ruta? ¿O no lo estoy llamando correctamente en mi llamada .then ? Cualquier idea sería apreciada. Todavía trato de aprender todo lo que puedo sobre el trabajo de fondo y parece que tengo problemas en cada paso.
Tenemos que clasificar mientras almacenamos objetos en el almacenamiento y analizar los objetos almacenados mientras los recuperamos.
// Put the object into storage localStorage.setItem('username', JSON.stringify(username)); // Retrieve the object from storage var retrievedUsername= localStorage.getItem('username'); console.log('retrievedUsername: ', JSON.parse(retrievedUsername));localStorage.setItem() guarda información como cadenas, por lo que ve que se guarda " [Objeto][Objeto] ", ya que eso es lo que está recibiendo.
Por lo tanto, debe transformar su objeto en una cadena antes de guardarlo.
Puede lograr esto usando la función JSON.stringify() .
Nota: tendrá que volver a transformar la Cadena en un objeto cuando necesite obtenerla. Puede lograr esto usando JSON.parse()
Ejemplo:
localStorage.setItem('username', JSON.stringify(userState.username)) localStorage.setItem('token', JSON.stringify(token)) JSON.parse(localStorage.getItem('username')) JSON.parse(localStorage.getItem('token'))la promesa de axios devuelve un objeto de respuesta que tiene un atributo de datos. Para acceder al token, debe llamar a res.data y almacenarlo así localStorage.setItem('token',res.data)