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.state
은LOGGED_IN
입니다. 로그인한 사용자는 다음 중 하나일 수 있습니다.활성: 지정된 디바이스에서 현재 앱을 사용 중인 인증된 단일 사용자입니다. SDK는 이 사용자를 발신 요청과 연결하고, Atlas App Services는 데이터 액세스 권한을 평가하고 이 사용자의 컨텍스트에서 함수를 실행합니다.
비활성: 현재 활성 사용자가 아닌 인증된 모든 사용자입니다.
로그아웃: 장치에서 인증했지만 이후 로그아웃했거나 세션이 취소된 모든 사용자입니다.
user.state
은LOGGED_OUT
입니다.제거됨: 장치에서 적극적으로 제거된 모든 사용자입니다. SDK는 사용자를 앱에서 로그아웃하고 사용자에 대한 모든 정보를 기기에서 제거합니다. 사용자는 앱을 다시 사용하려면 다시 인증해야 합니다.
user.state
은REMOVED
입니다.
장치에 새 사용자 추가
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.state
가 LOGGED_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
사용자 제거 및 삭제에 대한 자세한 내용은 사용자 제거를 참조하세요.