guitar-strings-123 / capstone-project

0 stars 1 forks source link

identify user by token in localStorage #242

Closed bryceAM closed 1 year ago

bryceAM commented 1 year ago

api/users.js

router.get('/holder/:token', async (req, res, next) => {
  const { token } = req.params;
  try {
    const user = jwt.verify(token, JWT_SECRET);
    res.send(user)
  } catch (error) {
    console.error(error)
  }
})

router.get('/fetch/:userName', async (req, res, next) => {
  const { userName } = req.params;
  try {
    const userObj = await User.getUserByUsername(userName);

    res.send(userObj);
  } catch (error) {
    console.error(error)
  }
})

components/App.js

  const fetchUser = async (storedToken) => {
    let userName;

    try {
      const userResponse = await fetch(`${DB}/api/users/holder/${storedToken}`, {
        headers: {
          'Content-type': 'application/json',
        },
      });
      const userResult = await userResponse.json();
      if (userResult) {
        userName = userResult.username;
      }
    } catch (error) {
      console.error(error)
    }

    try {
      const userObj = await fetch(`${DB}/api/users/fetch/${userName}`, {
        headers: {
          'Content-type': 'application/json',
        },
      });
      const returnedUser = await userObj.json();

      return returnedUser;
    } catch (error) {
      console.error(error);
    }
  };

    // reload token on page refresh
    useEffect(() => {
      let storedToken = localStorage.getItem('token');
      setToken(storedToken);

      const initUser = async () => {
        const fetchedUser = await fetchUser(storedToken);
        setUser(fetchedUser);
      }
      initUser();
    }, []);