2017-09-11 6 views
1

電子メール/パスワードの代わりにユーザー名/パスワードのログインシステムを使用したいと考えています。私が現在やっていることは、ユーザー名をとり、最後に「@ domain.com」を追加し、ユーザーをfirebaseに電子メール/パスワードアカウントとして登録することです。ユーザーを格納するためのfirebaseのキーとしてユーザー名を使用

私のfirebaseデータベースで、私は 'userProfiles/$ uid'の下にユーザ情報を保存しています。しかし、ユーザーのユーザー名だけが与えられていれば、最初に別のノードにアクセスしてuidを検索し、それを使用してユーザーデータにアクセスする必要があります。

私の質問です。代わりに各ユーザー名の下にユーザーデータを格納するだけで不利な点はありますか?私のセキュリティルールでは、私はこれを行うことができます:

$username + '@domain.com' === auth.token.email 

ほとんどの場合、私はユーザーのUIDに直接アクセスしています。しかし、私はユーザーのパスワードをリセットしたい(私はfirebaseで電子メールとしてユーザー名を使用しているので、自分で実装しなければならなかった)、ユーザー名にしかアクセスできない場合があります。

答えて

1

更新

ユーザーがusername + '@domain.com' Firebaseを使って署名されているので、としては、2人の別々のユーザーが同じ電子メールにサインアップすることはできませんので、重複したユーザ名を防ぐことができますコメントで指摘しました。ユーザーが作成されると、ユーザー名をデータベースに書き込むことができ、衝突は発生しません。ユーザーが自分のユーザー名を変更することが許可されている場合、この問題は難しくなる可能性があることを覚えておいてください。要求された名前が既に存在するかどうかを判断するには、新しく要求されたユーザー名を既存のユーザー名と照合する必要があります。最後に、Firebaseでは大文字と小文字が区別されるので、すべてのユーザ名を大文字/小文字に変換し、後ろの空白をトリムしてアップロードすることをお勧めします。

私が考えることができる最大の問題は、Firebaseによってuidが一意であることが保証されているため、重複はありません。ユーザー名ですべてを保存する場合は、ユーザーがサインアップするときに重複するユーザー名がないことを確認する必要があります。したがって、認証されていないユーザーが読み取ることができるデータベースの領域を、既存のユーザー名に対して要求されたユーザー名を確認する必要があります。

ほとんどの場合、どのようにデータにアクセスするのか考える必要があります。さらに、ユーザーデータを非正規化する場合(uid & usernameの下に格納)、両方のコピーが同期していることを確認する必要があります。 username -> uidを保存して、ユーザー名のみの場合はユーザーデータを取得するようにマッピングするほうが簡単でしょう。これは頻繁に起こることはなく、追加のネストされたクエリはパフォーマンスの違いをほとんど生み出すことはありません。

+0

firebaseは、firebaseに登録しているので、ユーザ名は一意になりません。 @ domain.comの形式で登録しています。「@ domain.com」は全ユーザ共通です。 –

+0

これは正しいようです。同じ電子メールアドレスを持つ2人のユーザーを作成することはできません。したがって、ユーザーの作成後にユーザー名データを書き込むと、ユーザー名を一意に保つという問題は発生しません。 – DoesData

関連する問題