新しいユーザが自分のユーザ名、パスワード、ニックネームを追加する必要がある小さなユーザログインフォームがあります(基本的なfirebase authはユーザ名として電子メールのみ受け付けます)。 )。ニックネームとユーザ名:ユーザを作成する前にFirebaseにデータが存在するかどうかをチェック
これは、私はキーがユーザ名に基づいて、それは2人の子供を持っているニックネームを受信するFirebaseに
を作成したユーザーの構造です。
Firebaseのauthメソッドを使用してユーザーを作成する前に、ニックネームがすでに存在するかどうかを確認するためにクエリを実行します。はいの場合、ユーザーは作成されずアラートがスローされます。ニックネームが存在しない場合は、ユーザーを作成し、上記のイメージからニックネームをユーザー構造に追加します。
ここで(コードは 'observeSingleEventOfType'を飛ばして、ニックネームが既に存在するかどうかを確認する前にcreateUserを実行していました)、思っていましたが、createUserコードを取得して'snapshot.exists()'の 'else'のようにニックネームクエリのobserveSingleEventOfType内に直接...
これは動作しているようですが、正しいかどうかわかりませんそれを行う方法...
それを行う別の方法(よりよい方法)はありますか?
以下のとおりです。 ありがとう!
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)
})
}
})
}
この質問にはもう必要ありませんが、一般的には:あなたの質問のJSONツリーの画像は、JSONをテキストとして持つほど便利ではないことにご留意ください。あなたのFirebaseデータベース。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –