[英]Firebase -How to check if a phone number exists inside phone auth before creating a new user
[英]Checking if data exists on Firebase before creating User
我有一個小的用戶登錄表單,新用戶必須在其中添加他的用戶名,密碼和昵稱(因為基本的Firebase身份驗證僅接受電子郵件作為用戶名,對嗎?)。
密鑰基於用戶名,並且有2個子代:昵稱和用戶名。
在嘗試使用Firebase中的auth方法創建用戶之前,我先查詢一下昵稱是否已經存在。 如果是,它不會創建用戶並引發警報。 如果昵稱不存在,它將創建用戶,然后從上圖將昵稱添加到用戶結構。
我花了一些時間思考和更改代碼(代碼跳了'observeSingleEventOfType'並執行了createUser,然后再檢查昵稱是否存在),我認為一個好主意是獲取createUser代碼並將其直接添加到昵稱查詢上的observeSingleEventOfType,作為“ if snapshot.exists()”的“ else” ...
它似乎正在工作,但是我不知道這是否是執行它的“正確”方式...
還有另一種方法(更好的方法)嗎?
方法如下。 謝謝!
func createUser(username: String, password: String, nickname: String){
var userCreated = false
var errorCode = 0
users.queryOrderedByChild("Nickname").queryEqualToValue(nickname).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if snapshot.exists() {
errorCode = 3
self.delegate?.didReceiveResponseFromFirebaseCreateUser!(userCreated, errorCode: errorCode)
}
else{
self.ref.createUser(username, password: password, withCompletionBlock: { (error) in
if error != nil {
print (error.description)
if error.description.rangeOfString("EMAIL_TAKEN") != nil {
errorCode = 1
}
else if error.description.rangeOfString("INVALID_EMAIL") != nil {
errorCode = 2
}
}
else{
userCreated = true
let newUser = User(username: username, nickname: nickname)
let newUserRef = self.users.childByAppendingPath(username.stringByReplacingOccurrencesOfString(".", withString: "-"))
newUserRef.setValue(newUser.toAnyObject())
}
self.delegate?.didReceiveResponseFromFirebaseCreateUser!(userCreated, errorCode: errorCode)
})
}
})
}
在構建我的上一個Firebase應用程序時,我遇到了同樣的問題。 我用來解決該問題的方法是創建一個從用戶名到用戶ID的附加映射。 所以我的結構看起來像這樣(uid是Firebase身份驗證的用戶ID):
users: {
accounts: {
uid1: {
username: frank,
...
},
uid2: {
username: monique,
...
}
...
},
username_to_uid: {
frank: uid1,
monique: uid2,
...
}
}
這有兩點:
請注意我與Firebase Event Observer的同步性問題:
昨天,我認為它正在運行,在調用segue打開另一個viewController時遇到問題(在Observer仍在運行但沒有結果的情況下調用新視圖,並且應用程序崩潰,因為未聲明使用委托方法)其他視圖)...
作為解決方案,我擺脫了所有委托,並使用完成處理程序重新編碼了方法……現在一切正常!
哦,@ pkacprzak:我進行了更改,並開始使用此“橋結構”存儲昵稱和uid之間的關系。 伙計,現在踢了! 非常感謝你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.