MongoDB Realm SwiftUI 继续会话/自动登录

MongoDB Realm SwiftUI continue session / auto login

我将 SwiftUI 2 与 MongoDB 同步领域 (10.5.2) 一起使用,目前我对如何在用户重新打开应用程序后继续会话感到困惑。

作为身份验证,我通过发布者使用电子邮件和密码,我知道我可以检查用户是否使用此功能登录:

app.currentUser!.isLoggedIn

这对我的用户来说也是 returns 正确的。但是我不知道如何从

获得发布者 $0
app.login(credentials: .emailPassword(email: username, password: password))
            .receive(on: DispatchQueue.main)
            .sink(receiveCompletion: {
                self.state.shouldIndicateActivity = false
                switch [=12=] {
                case .finished:
                    break
                case .failure(let error):
                    self.state.error = error.localizedDescription
                }
            }, receiveValue: {
                self.state.cardPublisher.send([=12=])

            })
            .store(in: &state.cancellables)

我用的方法

self.state.cardPublisher.send([=13=])

获取我的数据。所以我的问题是 如果用户重新启动应用程序,我如何获得 $0。

抱歉,如果这是一个愚蠢的问题,但我对组合还很陌生。

非常感谢任何帮助:)

如果对你有帮助,我目前有这两个发布者:

var cardPublisher = PassthroughSubject<RealmSwift.User, Error>()
let cardRealmPublisher = PassthroughSubject<Realm, Error>()

它们是这样使用的:

cardPublisher
            .receive(on: DispatchQueue.main)
            .flatMap { user -> RealmPublishers.AsyncOpenPublisher in
                self.shouldIndicateActivity = true
                var realmConfig = user.configuration(partitionValue: "teamID=123")
                realmConfig.objectTypes = [Card.self, Dog.self]
                return Realm.asyncOpen(configuration: realmConfig)
            }
            .receive(on: DispatchQueue.main)
            .map {
                self.shouldIndicateActivity = false
                return [=15=]
            }
            .subscribe(cardRealmPublisher)
            .store(in: &self.cancellables)

cardRealmPublisher
            .sink(receiveCompletion: { result in
                if case let .failure(error) = result {
                    self.error = "Failed to log in and open realm: \(error.localizedDescription)"
                }
            }, receiveValue: { realm in
                self.cardRealm = realm
                self.loadData()
            })
            .store(in: &cancellables)

我自己解决了,其实很简单。对于任何可能需要它的人,只需在应用加载后使用此方法:

if app.currentUser!.isLoggedIn {
                app.currentUser.publisher
                .receive(on: DispatchQueue.main)
                .sink(receiveCompletion: {
                    self.shouldIndicateActivity = false
                    switch [=10=] {
                    case .finished:
                        break
                    case .failure(let error):
                        self.error = error.localizedDescription
                    }
                }, receiveValue: {
                    self.error = nil
                    self.cardPublisher.send([=10=])

                })
                .store(in: &self.cancellables)
} else { 
// Regular Login
}