다중 사용자 애플리케이션 - Swift SDK
Realm Swift SDK 를 사용하면 여러 사용자 가 특정 기기에서 앱 에 동시에 로그인할 수 있습니다. 클라이언트 애플리케이션은 여러 사용자가 동시에 로그인한 경우에도 단일 활성 사용자의 컨텍스트에서 실행 됩니다. 다시 로그인 할 필요 없이 인증된 사용자 간에 빠르게 전환할 수 있습니다.
중요
로그인한 사용자는 재인증 없이 누구나 활성 사용자가 될 수 있습니다. 이는 앱에 따라 보안 취약점일 수 있습니다. 예를 들어, 공유 장치의 사용자는 자격 증명을 제공하거나 명시적인 권한을 요구하지 않고도 동료의 로그인 계정으로 전환할 수 있습니다. 애플리케이션에 더 엄격한 인증이 필요한 경우 사용자 간 전환을 피하고 다른 사용자를 인증하기 전에 활성 사용자를 명시적으로 로그아웃하는 것이 좋습니다.
사용자 계정 상태
사용자가 특정 기기 또는 브라우저에서 Atlas App Services 를 통해 처음 로그인하면 Realm SDK 는 사용자 정보를 저장하고 기기에서 사용자의 상태 를 추적 합니다. 적극적으로 사용자를 제거하지 않는 한, 사용자가 로그 아웃하더라도 사용자의 데이터는 기기에 남아 있습니다.
다음 상태는 특정 시점의 기기 내 사용자를 설명합니다.
인증됨: 장치에 로그인했지만 로그아웃하지 않았거나 세션이 취소되지 않은 모든 사용자입니다.
활성: 현재 특정 기기에서 앱을 사용 중인 인증된 단일 사용자입니다. SDK는 이 사용자를 발신 요청과 연결하고, Atlas App Services는 데이터 액세스 권한을 평가하고 이 사용자의 컨텍스트에서 함수를 실행합니다. 자세한 내용은 활성 사용자 를 참조하세요.
비활성: 현재 활성 사용자가 아닌 모든 인증된 사용자입니다. 언제든지 활성 사용자를 현재 비활성 사용자로 전환 할 수 있습니다.
로그아웃: 장치에서 인증했지만 이후 로그아웃했거나 세션이 취소된 모든 사용자입니다.
다음 다이어그램은 특정 이벤트가 발생할 때 클라이언트 앱 내의 사용자가 상태 간에 전환하는 방법을 보여줍니다.
장치에 새 사용자 추가
Realm SDK는 사용자가 해당 기기에 처음 로그인할 때 자동으로 해당 기기에 사용자를 추가합니다. 사용자가 로그인하면 즉시 애플리케이션의 활성 사용자가 됩니다.
let app = App(id: YOUR_APP_SERVICES_APP_ID) let joeCredentials = Credentials.emailPassword(email: "joe@example.com", password: "passw0rd") app.login(credentials: joeCredentials) { (result) in switch result { case .failure(let error): print("Login failed: \(error.localizedDescription)") case .success(let joe): // The active user is now Joe assert(joe == app.currentUser) } } let emmaCredentials = Credentials.emailPassword(email: "emma@example.com", password: "pa55word") app.login(credentials: emmaCredentials) { (result) in switch result { case .failure(let error): print("Login failed: \(error.localizedDescription)") case .success(let emma): // The active user is now Joe assert(emma == app.currentUser) } }
장치의 모든 사용자 나열
기기에 저장된 모든 사용자 계정 목록에 액세스 할 수 있습니다. 이 목록에는 현재 인증 여부에 관계없이 특정 기기에서 앱 에 로그인한 모든 사용자가 포함됩니다.
let app = App(id: YOUR_APP_SERVICES_APP_ID) let users = app.allUsers users.forEach({ (key, user) in print("User: \(key) \(user)") })
활성 사용자 변경
다음 코드를 사용하여 언제든지 앱의 활성 사용자 를 로그인한 다른 사용자로 변경할 수 있습니다.
let app = App(id: YOUR_APP_SERVICES_APP_ID) // ... log in ... // Get another user on the device, for example with `app.allUsers` let secondUser: User = getSomeOtherUser() XCTAssertNotEqual(app.currentUser, secondUser) // assert(app.currentUser != secondUser) // Switch to another user // app.switch(to: secondUser) // The switch-to user becomes the app.currentUser // XCTAssertEqual(app.currentUser, secondUser) // assert(app.currentUser == secondUser)
기기에서 사용자 제거
장치에서 사용자에 대한 모든 정보를 제거하고 사용자를 자동으로 로그아웃할 수 있습니다.
app.currentUser?.logOut { (error) in // user is logged out or there was an error }