Связанные с MongoDB Stitch CustomData потеряны после обновления страницы

Я использую React с MongoDB и MongoDB Stitch без сервера в качестве службы. Я сделал вход в Google, для чего следил за учебником по MongoDB.

https://docs.mongodb.com/stitch/users/configure-custom-user-data/

Потому что я хочу, чтобы пользователи также предоставляли дополнительные данные. Я создал настраиваемую вкладку данных с именем users, которую я связал с полем owner_id для пользователя, который входит в систему. Я следил за документами, и это работает нормально.

настроить пользовательские данные

Когда пользователь входит в свойство, объект текущего пользователя с именем customData содержит дополнительные данные. Однако как только происходит обновление страницы, все данные текущего пользователя по-прежнему доступны, за исключением того, что объект customData пуст.

Можно ли сохранить доступность customData для currentUser. Или MongoDB Stitch предоставляет customData пользователя только один раз после входа в систему?

export const StitchAuthProvider = ({ children }) => {
  const [authState, setAuthState] = useState({
    isLoggedIn: hasLoggedInUser(),
    currentUser: getCurrentUser()
  });

  useEffect(() => {
    const authListener = {
      onUserLoggedIn: (auth, loggedInUser) => {
        if (loggedInUser) {
          setAuthState(authState => ({
            ...authState,
            isLoggedIn: true,
            currentUser: loggedInUser
          }));
          if (!loggedInUser.customData._id) {
            try {
              users.insertOne({
                owner_id: loggedInUser.id,
                ...loggedInUser.profile.data
              });
            } catch (error) {
              console.error("aaaaah Ik messed up!", error);
            }
          }
        }
      },
      onUserLoggedOut: (auth, loggedOutUser) => {
        setAuthState(authState => ({
          ...authState,
          isLoggedIn: false,
          currentUser: null
        }));
      }
    };
    addAuthenticationListener(authListener);
    handleOAuthRedirects();
    setAuthState(state => ({ ...state }));
    return () => {
      removeAuthenticationListener(authListener);
    };

    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  // Authentication Actions
  const handleLogin = async provider => {
    if (!authState.isLoggedIn) {
      switch (provider) {
        case "anonymous":
          return loginAnonymous();
        case "google":
          return loginGoogle();
        default: {
        }
      }
    }
  };

  const handleLogout = async () => {
    const { isLoggedIn } = authState;
    if (isLoggedIn) {
      await logoutCurrentUser();
      setAuthState({
        ...authState,
        isLoggedIn: false,
        currentUser: null
      });
    } else {
      console.log(`can't handleLogout when no user is logged in`);
    }
  };

  const authInfo = useMemo(
    () => {
      const { isLoggedIn, currentUser } = authState;
      // TODO: remove logger
      console.log(currentUser);
      const value = {
        isLoggedIn,
        currentUser,
        actions: { handleLogin, handleLogout }
      };
      return value;
    },
    // eslint-disable-next-line react-hooks/exhaustive-deps
    [authState.isLoggedIn]
  );

0 ответов

Другие вопросы по тегам