如果存在多个有效的登录用户,则无法调用RealmSwift currentUser



我有一个领域平台,我可以很好地注册和登录用户。当我尝试用当前用户打开同步领域文件时,它将不允许,Xcode会抛出错误如果存在多个有效的登录用户,则无法调用currentUser。我已经关注了我在realms文档上能找到的所有信息,我不明白为什么会发生这种情况。我有一个登录视图控制器和一个单独的视图控制器,其中包含领域文件。以下是我正在处理的问题的示例代码。

LogInViewController

import Cocoa
import RealmSwift
class LoginViewController: NSViewController {
@IBOutlet weak var username: NSTextField!
@IBOutlet weak var password: NSSecureTextField!
let realm = try! Realm()
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func loginButtonPressed(_ sender: NSButton) {    
let login = SyncCredentials.usernamePassword(username: "(username.stringValue)", password: "(password.stringValue)", register: false)
SyncUser.logIn(with: login, server: Constants.AUTH_URL, onCompletion: { [weak self] (user, err) in
if let _ = user {
if let mainWC = self?.view.window?.windowController as? MainWindowController {
mainWC.segueToHome()
print("Login Pressed")
}
} else if let error = err {
fatalError(error.localizedDescription)
}
})
}
}

SecondViewController

import Cocoa
import RealmSwift
class ViewController: NSViewController {
@IBOutlet weak var textField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
let config = SyncUser.current!.configuration(realmURL: Constants.REALM_URL, fullSynchronization: false, enableSSLValidation: true, urlPrefix: nil)
self.realm = try! Realm(configuration: config)
}
func save(data: Data) {
do {
try realm.write {
realm.add(data)
}
} catch {
print("there was an error saving data (error)")
}
}
@IBAction func saveData(_ sender: NSButton) {    
let saveData = Data()
saveData.textField = textField.stringValue
save(data: data)
}
func loadData() {
data = realm.objects(Data.self).sorted(byKeyPath: "timestamp", ascending: false)
}
}

也许,这个页面可以帮助您解决问题。

我解决了同样的问题。

///
/// quit all other users session
///
for u in SyncUser.all {
u.value.logOut()
}
///
///
///
let creds: SyncCredentials = SyncCredentials.usernamePassword(
username: YOUR_USER,
password: YOUR_PASS
)
SyncUser.logIn(
with: creds,
server: YOUR_AUTH_URL
) { (user: SyncUser?, err: Error?) in
///
/// Your action ...
///
}

在logOut和logIn之后,这种方法很可能会成功。

let config = SyncUser.current!.configuration(realmURL: Constants.REALM_URL, fullSynchronization: false, enableSSLValidation: true, urlPrefix: nil)
self.realm = try! Realm(configuration: config)

如果您将Realm与Firebase一起使用,这样的代码片段将使您免于身份验证难题。

检查SyncUser uid是否与firebase中的uid匹配,并注销无关帐户。

for syncUser in SyncUser.all {
if(syncUser.key != (FirebaseAuth.Auth.auth().currentUser?.uid ?? "")) {
syncUser.value.logOut()
}
}

相关内容

  • 没有找到相关文章

最新更新