Firebaseエコシステムの追加のユーザデータフィールドに関する記事を読んだら、私は/users/
の下でユーザ名をノードキーとして使用して、ユーザ名を保存して検証するという最良の方法に近づいた。データベースフィールドが有効な場合にのみFirebaseでユーザを作成する方法は?
私は、クライアント側とデータベースルール内でユーザ名を検証しています: ": "$user.matches(/^[0-9A-Z]{3,18}$/i)&& newData.hasChildren(['uid']) && !data.parent().hasChild($user)",
ユーザーまでに署名するとき、私は問題に直面しています。私のサインアップの方法で、私はここにコードの一部だ、createUserWithEmailAndPassword
方法の成功を約束する決意でデータベースにユーザー名を保存します。
...
.createUserWithEmailAndPassword(payload.email, payload.password)
.then((user) => {
// saving additional user information
firebase
.database()
.ref(`users/${payload.username}`)
.set({
uid: user.uid,
})
.then(() => {
...
クライアント側の検証良いですが、明らかに十分ではありません。私のアプリケーションはうまくいきますが、ユーザー名のクライアント側の検証を無効にして無効なユーザー名を送信しようとすると、ユーザー名なしでユーザーが作成されます。
私が見る唯一の解決策は、作成が成功した場合は最初にユーザ名ノードを作成することです - 登録するとエラーがスローされない場合はユーザにサインインしてください - プログラムの実行を続行してください。ユーザー名。しかし、それは私にとって非常に汚い解決策のようです。
どうすればこの問題をうまく解決できますか? ありがとう!
ありがとうございました!しかし、検証してユーザネーム・ノードを作成した最初のステップの後、将来、このノードに 'uid'を追加するために、クライアントのどこかに格納する必要があります。このステップでは、ユーザー名が無効なものに変更される可能性があります。私たちは、ユーザが作成したノードに 'uid 'を書き込むことを他のノードに制限する方法はありません。 (私がすべてのことを正しく理解していれば)。ユーザー名を入力して実際の登録に進まなかった場合も対処する必要があります。もちろん、すべてのユーザ名ノードを 'uid'時間なしで削除することはできますが、それでもなお汚れているようです。 ありがとう! –
しかし、ユーザー作成プロセス全体をクラウド機能に置いたらどうでしょうか? –
私は混乱を理解していると思います。 'uid'はユーザ属性で、' createUserWithEmailandPassword'の時に作成されます。したがって、この 'uid'は' username'ではなく、あなたのユーザの一意の識別情報として機能するはずです。 –