swift - 在 Mongo RealmSwift 中注册用户之前如何调用系统函数?
问题描述
显然,调用 Realm 系统函数的要求之一是首先用户登录。我需要用户确认他们的外部设备 ID 以确保它存在并且可用。如果是,则继续进行 emailPasswordAuth 和用户注册。
我一直在触发下面的 if/elseif 错误处理程序,CheckDeviceAvailability
但不知何故return
被忽略了,无论如何用户都已注册。我究竟做错了什么?
我尝试过使用app.currentUser?.functions...
,我也尝试过将函数嵌套在app.login
块中,但仍然有问题。我不太了解async
功能,所以我想它与此有关。
func signUp(EMAIL: String, PASSWORD: String, CONFIRM: String, DEVICEID: String) {
if EMAIL == "" || PASSWORD == "" || CONFIRM == "" || DEVICEID == "" {
self.errorMSG = "Fields must be filled"
return
}
if PASSWORD != CONFIRM {
self.errorMSG = "Passwords must match"
return
}
app.currentUser!.functions.CheckDeviceAvailability([AnyBSON(DEVICEID)]) { result, error in
self.statusMSG = result?.stringValue
if error != nil {
self.errorMSG = "Failed to call function: \(error!.localizedDescription)"
_ = app.currentUser?.logOut()
return
} else if result!.stringValue != "available" {
self.errorMSG = "That device is already taken, try again"
_ = app.currentUser?.logOut()
return
} else {
app.emailPasswordAuth.registerUser(email: EMAIL, password: PASSWORD) { ERROR in
guard ERROR == nil else {
self.errorMSG = "Failed to register user: \(ERROR!.localizedDescription)"
return
}
app.login(credentials: .emailPassword(email: EMAIL, password: PASSWORD)) { (RESULT) in
DispatchQueue.main.async {
switch RESULT {
case .failure:
return
case .success(let USER):
let config = USER.configuration(partitionValue: "U-\(USER.id)")
Realm.asyncOpen(configuration: config) { (RES) in
switch RES {
case .failure(let ERR):
self.errorMSG = "Failed to open realm: \(ERR)"
return
case .success(let REALM):
self.statusMSG = "Open user realm success"
let newUser = User()
newUser._id = USER.id
newUser.auraID = "U-\(USER.id)"
newUser.Preferences = User_Preferences()
newUser.Preferences?.email = EMAIL
newUser.Preferences?.displayName = ""
newUser.Preferences?.deviceID = DEVICEID
newUser.Preferences?.signupDate = Date()
try! REALM.write {
REALM.create(User.self, value: newUser, update: .modified)
}
self.openUserRealm()
}
}
}
}
}
}
}
}
解决方案
推荐阅读
- mongodb - 有没有办法在 mongoDB Collection 中查找和替换所有出现的字符串?
- java - Corda Accounts 使用 java 创建帐户时由于依赖项错误而失败
- android - Kotlin - 使用检索到的 Firebase 数据更新 Android 视图的最佳方式
- hyperledger-fabric - Hyperledger Fabric 2.0 - gRPC 消息超出最大大小 4194304:5947481
- javascript - Javascript - 如何在列表中循环遍历字典
- arrays - Angular 8 - 通过引用输入
- bash - Cocoa pods 终端 utf-8 编码
- git - git 只跟踪一个没有任何文件的目录
- python - 无法使用 PySpark xgboost4j 保存模型
- ios - iTunesConnect:“无法加载您的一个或多个应用预览。再试一次。”