사용자 지정 사용자 데이터 - C++ SDK
사용자의 사용자 지정 데이터 읽기
현재 로그인한 사용자의 User
객체 를 통해 현재 로그인한 사용자의 사용자 지정 사용자 데이터 를 읽을 수 있습니다. User
객체 를 통해 사용자 지정 사용자 데이터 를 편집할 수 없습니다. 사용자 지정 사용자 데이터 업데이트 를 참조하세요. 데이터를 읽으려면 로그인한 사용자의 User
객체 에서 custom_data
속성 에 액세스 합니다.
// Custom user data could be stale, so refresh it before reading it user.refresh_custom_user_data().get(); auto userData = user.custom_data().value(); /* Parse the string custom data to use it more easily in your code. In this example, we're using the nlohmann/json library, but use whatever works with your application's constraints. */ auto userDataObject = nlohmann::json::parse(userData); CHECK(userDataObject["favoriteColor"] == "gold");
경고
사용자 지정 데이터가 오래되었을 수 있음
Atlas App Services는 기본 데이터가 변경될 때 클라이언트 사이드 사용자 사용자 지정 데이터 문서의 값을 즉시 동적으로 업데이트하지 않습니다. 대신 Atlas App Services는 사용자가 액세스 토큰 을 새로 고칠 때마다 최신 버전의 사용자 지정 사용자 데이터를 가져옵니다. 이 토큰은 Atlas App Services 백엔드에 연결하는 대부분의 SDK 작업에서 사용됩니다. 기본 만료 시간 30 분 전에 토큰을 새로 고치지 않으면 C++ SDK는 다음 번에 백엔드를 호출할 때 토큰을 새로 고칩니다. 사용자 지정 사용자 데이터는 백엔드에 대한 다음 SDK 호출이 발생할 때까지의 시간을 더한 최대 30 분 동안 부실 상태가 될 수 있습니다.
참고
최신 버전의 사용자 지정 사용자 데이터가 필요한 경우 refresh_custom_user_data() 함수를 사용하여 최신 버전의 사용자 지정 데이터를 요청하세요.
사용자의 사용자 지정 데이터 문서 만들기
사용자에 대한 사용자 지정 사용자 데이터를 만들려면 사용자 지정 사용자 데이터 컬렉션에서 MongoDB 문서를 만듭니다. 문서의 사용자 ID 필드에는 사용자의 사용자 ID가 포함되어야 합니다.
팁
Realm UI에서 Custom User Data 탭 아래의 App Users 페이지에서 다음을 포함한 사용자 지정 사용자 데이터 설정을 찾고 구성합니다.
사용자 지정 사용자 데이터 클러스터, 데이터베이스 및 컬렉션
사용자 지정 사용자 데이터 문서를 사용자에게 매핑하는 데 사용되는 사용자 ID 필드
이 문서 를 만들 수 있는 한 가지 방법은 사용자 지정 데이터 문서 를 사용자 지정 사용자 데이터 컬렉션 에 삽입하는 Atlas Function 를 호출하는 것입니다. Atlas Function 에서 사용자 지정 사용자 데이터 를 추가하기 위한 단일 패턴 은 없습니다. 애플리케이션의 사용 사례 에 맞게 하나 이상의 함수를 쓰기 (write) 해야 합니다.
이 예제에서 Atlas Function은 클라이언트가 전달한 객체를 가져와서 Atlas의 사용자 지정 사용자 데이터 컬렉션에 추가합니다. 함수는 사용자 지정 사용자 데이터가 아직 존재하지 않는 경우 이를 생성하고, 존재하는 경우 모든 데이터를 대체합니다.
exports = async function updateCustomUserData(newCustomUserData) { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("cpp-custom-user-data"); const filter = { userId }; // Replace the existing custom user data document with the new one. const update = { $set: newCustomUserData }; // Insert document if it doesn't already exist const options = { upsert: true }; const res = await customUserDataCollection.updateOne(filter, update, options); return res; };
다음 예제 에서는 함수를 호출 하여 현재 로그인한 사용자의 사용자 ID와 favoriteColor
값이 포함된 문서를 사용자 지정 사용자 데이터 collection에 삽입합니다.
auto user = app.login(realm::App::credentials::anonymous()).get(); // Functions take a string argument. Any quotes within the array must be // escaped. auto customData = "[{\"userId\":\"" + user.identifier() + "\",\"favoriteColor\":\"gold\"}]"; // Call an Atlas Function to insert custom data for the user auto result = user.call_function("updateCustomUserData", customData).get();
사용자 지정 사용자 데이터 문서를 만들 때 임의의 필드와 값을 원하는 만큼 추가할 수 있습니다. 사용자 ID 필드는 문서를 User
객체에서 사용자 지정 사용자 데이터로 사용할 수 있도록 하기 위한 유일한 요구 사항입니다.
사용자의 사용자 지정 데이터 업데이트
Atlas Function, MongoDB Compass 또는 MongoDB Atlas Data Explorer를 사용하여 사용자 지정 사용자 데이터를 업데이트할 수 있습니다.
Realm 함수를 사용하여 사용자의 사용자 지정 사용자 데이터를 업데이트하려면 사용자 ID 필드에 사용자의 사용자 ID가 포함된 MongoDB 문서를 편집합니다. 다음 예제에서는 위에서 사용자 지정 사용자 데이터 문서를 생성하는 데 사용된 것과 동일한 함수를 호출합니다. 여기에서 현재 로그인한 사용자의 사용자 ID가 포함된 문서의 favoriteColor
필드를 업데이트합니다.
// Functions take a string argument. Any quotes within the array must be // escaped. auto updatedData = "[{\"userId\":\"" + user.identifier() + "\",\"favoriteColor\":\"black\"}]"; // Call an Atlas Function to update custom data for the user auto updateResult = user.call_function("updateCustomUserData", updatedData).get(); // Refresh the custom user data before reading it to verify it succeeded user.refresh_custom_user_data().get(); auto updatedUserData = user.custom_data().value(); /* Parse the string custom data to use it more easily in your code. In this example, we're using the nlohmann/json library, but use whatever works with your application's constraints. */ auto updatedUserDataObject = nlohmann::json::parse(updatedUserData); CHECK(updatedUserDataObject["favoriteColor"] == "black");
팁
사용자 ID를 확인하려면 user.identifier()
속성에 액세스하거나 App Services UI App Users 페이지의 Users 탭 아래에서 사용자를 찾습니다.
사용자의 사용자 지정 데이터 삭제
사용자 지정 사용자 데이터는 사용자 객체 에 연결된 문서 에 저장됩니다. 사용자를 삭제해도 사용자 지정 사용자 데이터 는 삭제 되지 않습니다. 예를 예시Apple의 계정 삭제 지침 을 준수하기 위해 사용자 데이터를 완전히 삭제 합니다. 사용자의 사용자 지정 데이터 문서 를 수동으로 삭제 해야 합니다.
Atlas Function, MongoDB Compass 또는 MongoDB Atlas Data Explorer를 사용하여 사용자 지정 사용자 데이터를 삭제할 수 있습니다.
이 예제에서 Atlas Function에는 인수가 필요하지 않습니다. 함수는 함수 컨텍스트를 사용하여 호출자의 사용자 ID를 확인하고, 사용자의 ID와 일치하는 사용자 지정 사용자 데이터 문서를 삭제합니다.
exports = async function deleteCustomUserData() { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("cpp-custom-user-data"); const filter = { userId }; const res = await customUserDataCollection.deleteOne(filter); return res; };
이 함수를 호출하는 코드에서는 로그인한 사용자만 함수를 호출하면 됩니다.
auto deleteResult = user.call_function("deleteCustomUserData", "[]").get();