Связанные с 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]
);