Docs Menu

managed 다중 사용자 애플리케이션 - Kotlin SDK

이 페이지에서는 Kotlin SDK를 사용하여 단일 기기에서 여러 Atlas App Services 사용자를 managed 설명합니다. 클라이언트 앱에서 사용자를 인증하고 로그인하는 방법을 알아보려면 사용자 생성 및 인증 - Kotlin SDK를 참조하세요.

Realm을 사용하면 여러 사용자가 특정 기기에서 동시에 앱에 로그인할 수 있습니다. Realm 클라이언트 애플리케이션은 여러 사용자가 동시에 로그인한 경우에도 단일 활성 사용자 의 컨텍스트에서 실행됩니다. 한 번에 한 명의 활성 사용자만 있을 수 있으며, 활성 사용자는 모든 발신 요청과 연결됩니다.

사용자 계정 은 애플리케이션 의 고유한 단일 사용자를 나타냅니다. App Services 는 사용자가 기기에서 앱 을 처음 인증하고 로그인할 때 고유한 User 객체 를 생성합니다. 로그인 한 후 SDK는 사용자 정보를 저장하고 기기에서 사용자의 상태 를 추적 합니다. 이 데이터는 장치에서 사용자를 적극적으로 제거 하지 않는 한 사용자가 로그아웃하더라도 장치에 남아 있습니다. App Services 사용자 및 사용자 계정에 대한 자세한 내용은 App Services 문서의 사용자 계정 을 참조하세요.

특정 기기에서 사용자의 가능한 상태 는 코틀린 SDK ( 코틀린 SDK (Kotlin SDK) )에서 사용자가 표시합니다. 상태 열거형. 사용자 계정은 LOGGED_OUT, LOGGED_IN 또는 REMOVED 일 수 있습니다. 다음은 이러한 상태가 주어진 시간에 기기 내 사용자에게 어떻게 해당하는지 설명합니다.

  • 로그인: 장치에 로그인했지만 로그아웃하지 않았거나 세션이 취소되지 않은 인증된 사용자입니다. user.stateLOGGED_IN 입니다. 로그인한 사용자는 다음 중 하나일 수 있습니다.

    • 활성: 지정된 디바이스에서 현재 앱을 사용 중인 인증된 단일 사용자입니다. SDK는 이 사용자를 발신 요청과 연결하고, Atlas App Services는 데이터 액세스 권한을 평가하고 이 사용자의 컨텍스트에서 함수를 실행합니다.

    • 비활성: 현재 활성 사용자가 아닌 인증된 모든 사용자입니다.

  • 로그아웃: 장치에서 인증했지만 이후 로그아웃했거나 세션이 취소된 모든 사용자입니다. user.stateLOGGED_OUT 입니다.

  • 제거됨: 장치에서 적극적으로 제거된 모든 사용자입니다. SDK는 사용자를 앱에서 로그아웃하고 사용자에 대한 모든 정보를 기기에서 제거합니다. 사용자는 앱을 다시 사용하려면 다시 인증해야 합니다. user.stateREMOVED 입니다.

Realm SDK는 사용자가 해당 장치에 처음 로그인할 때 자동으로 장치에 추가합니다. 사용자가 성공적으로 로그인하면 즉시 애플리케이션의 활성 사용자가 됩니다.

다음 예제에서는 Joe가 앱에 로그인하여 활성 사용자가 됩니다. 그런 다음 Emma는 로그인하여 Joe를 활성 사용자로 대체합니다.

val app = App.create(YOUR_APP_ID) // Replace with your App ID
runBlocking {
// Log in as Joe
val joeCredentials = Credentials.emailPassword(joeEmail, joePassword)
try {
val joe = app.login(joeCredentials)
// The active user is now Joe
val user = app.currentUser
Log.v("Successfully logged in. User state: ${joe.state}. Current user is now: ${user?.id}")
assertEquals(joe, user)
} catch (e: Exception) {
Log.e("Failed to log in: ${e.message}")
}
// Log in as Emma
val emmaCredentials = Credentials.emailPassword(emmaEmail, emmaPassword)
try {
val emma = app.login(emmaCredentials)
// The active user is now Emma
val user = app.currentUser
Log.v("Successfully logged in. User state: ${emma.state}. Current user is now: ${user?.id}")
assertEquals(emma, user)
} catch (e: Exception) {
Log.e("Failed to log in: ${e.message}")
}
}
Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e130075a51f12a9e635
Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e1357aaf22529343c1b

App.currentUser 를 사용하여 현재 활성 사용자를 조회 할 수 있습니다. 여러 사용자가 로그인한 경우 장치에 마지막으로 로그인한 유효한 사용자가 반환됩니다. 이 메서드는 로그인한 사용자가 없는 경우 null 를 반환합니다.

val user = app.currentUser

자세한 내용은 현재 사용자 조회를 참조하세요.

app.allUsers() 메서드를 사용하여 기기에 저장된 모든 알려진 사용자 계정의 맵에 액세스할 수 있습니다. 이 메서드는 현재 인증 여부( user.stateLOGGED_IN 또는 LOGGED_OUT)에 관계없이 특정 기기에서 클라이언트 앱에 로그인한 모든 사용자를 반환합니다.

다음 예시 에서 SDK는 Emma와 Joe의 user.id를 모두 반환합니다.

// Get all known users on device
val allUsers = app.allUsers()
for ((key) in allUsers) {
Log.v("User on Device $device: $key")
}
User on Device 651330cebe1d42b24b8d510f: 65133e1357aaf22529343c1b
User on Device 651330cebe1d42b24b8d510f: 65133e130075a51f12a9e635

user.logOut() 메서드 를 사용하여 로그인한 사용자를 앱에서 로그아웃할 수 있습니다. 메서드. 로그아웃한 사용자는 기기에 계속 저장되지만 앱을 사용하려면 다시 로그인해야 합니다.

다음 예제에서는 Joe가 현재 현재 사용자로 로그인되어 있습니다. 앱에서 Joe를 로그아웃한 후 Joe가 여전히 장치에 사용자로 저장되어 있고 Emma가 현재 사용자임을 확인합니다.

try {
joe.logOut()
Log.v("Successfully logged out user. User state: ${joe.state}. Current user is now: ${app.currentUser?.id}")
} catch (e: Exception) {
Log.e("Failed to log out: ${e.message}")
}
val joeIsAUser = app.allUsers().containsKey(joe.id)
assertTrue(joeIsAUser)
Successfully logged out user. User state: LOGGED_OUT. Current user is now: 65133e1357aaf22529343c1b

사용자 로그인 및 앱 로그아웃에 대한 자세한 내용은 사용자 생성 및 인증 - Kotlin SDK를 참조하세요.

user.remove() 를 사용하여 기기에서 사용자와 해당 사용자에 대한 모든 정보를 적극적으로 제거할 수 있습니다. 제거된 후에는 사용자가 앱을 다시 사용하려면 다시 인증해야 합니다. App Services App에서 User 객체는 삭제 되지 않습니다 .

다음 예에서 Emma는 장치에 현재 (그리고 유일한) 로그인한 사용자입니다. Emma를 제거한 후 Joe가 여전히 로그아웃되어 있으므로 Emma가 장치에서 제거되고 현재 사용자가 없는 것을 확인합니다.

assertEquals(emma, app.currentUser)
try {
emma.remove()
Log.v("Successfully removed user. User state: ${emma.state}. Current user is now: ${app.currentUser?.id}")
} catch (e: Exception) {
Log.e("Failed to remove user: ${e.message}")
}
val emmaIsAUser = app.allUsers().containsKey(emma.id)
assertFalse(emmaIsAUser)
Successfully removed user. User state: REMOVED. Current user is now: null

사용자 제거 및 삭제에 대한 자세한 내용은 사용자 제거를 참조하세요.