2016-09-07 5 views
0

私はユーザーリストを管理する必要があるAndroidアプリを開発しています。問題は、ユーザーが自己登録して自分のアカウントを管理しているソーシャルアプリとは対照的に、Firebaseはこのようなシナリオに対して多くのサポートを提供していないようです。私はFirebaseコンソールにユーザーを作成することができましたが、これでは不十分です。アプリでFirebaseユーザーを管理する

ユーザーは電子メールとパスワードで登録されますが、一部のユーザーには管理者権限が必要で、ユーザーリストの編集が許可されている必要があります。しかし、Firebaseコンソールにリストされているユーザは、パーミッションの追加情報を入れる場所がありません。したがって、この情報はメインデータベースになければなりません。コンソールでデータベースツリーを編集するのは妥当ではないので、これはアプリで行う必要があります。

最初の問題は、アプリからユーザーリストを取得する方法がないことです。この問題を回避するには、createUserWithEmailAndPassword()関数を使用してアプリ内でのみユーザーを作成できます。その後、追加のユーザー情報をメインデータベースに保存して同期させておくことができます。

新しく作成されたユーザーが自動的にサインインして、管理ユーザーをログアウトするなどのマイナーな問題を除いて、関数は失敗し始め、エラーログには「TOO_MANY_ATTEMPTS_TRY_LATER」と表示されます。これは受け入れられません。

ご意見をお寄せください。ありがとうございました。

+0

新規ユーザーを自動的にサインインするという小さな問題については、[この回答](http://stackoverflow.com/a/38013551/4916627)をチェックしてください。 –

+0

あなたの質問は何ですか? –

+0

@Frank van Puffelen私の質問は、あまりにも多くの試行のエラーを回避する方法、またはおそらくユーザーに他の方法でアクセス許可を割り当てる方法です。 –

答えて

1

ユーザーはメールアドレスとパスワードで登録することになっている、一部のユーザーは は、管理者権限を持っている必要がありますし、ユーザーのリストを編集することが許可され、私は セキュリティルールを使用してこれを強制することができます。しかし、 Firebaseコンソールに記載されているユーザーは 権限のための余分な情報を入れて任意の場所を持っていないので、この情報がメインデータベースに行かなければならない

あなたは管理者のための独立したworflowは、追加することになりべきDBノード "admins"へのadmin UID。

その後、あなたのユーザーは、あなたが「.WRITE」 のようなものを使用することができ、ルールを使用して管理者であるかどうかを確認する必要があるとき: 『root.child(『管理者/』+ $ user_idの).exists()』

他のユーザーの作成とログインはわかりません。私はdynamic linksを招待状に使用し、招待されたユーザーに自分のユーザーを作成してサインインさせることを提案します。ダイナミックリンク情報を使用して、招待した人を見てそれに応じて行動することができます。

+0

DBノードに管理UIDを追加することは、アプリからすべてのユーザーのUIDのリストを取得する方法がないためです(コンソールの各UIDをコピー&ペーストするのは妥当ではありません)。だから私は自分でユーザーを作成します。私はそれらを作成した直後にUIDを取得します。招待状の使用もOKではなく、管理者が従業員リストをDBに入力して役割を割り当てるより深刻なアプリを考えてください。あなたの答えをありがとう。 –

+0

明確にするために、私はあなたが示唆したようにセキュリティルールを使用する方法を知っています。問題は、プログラムでUIDを取得することです。 –

+0

のいずれかの時点で、ユーザーを管理者に設定している場合は、そのユーザーを作成するか、後で手動で作成します。いずれの場合も、そのユーザーのUIDにアクセスする必要があります。他のユーザーが独自のレコードを作成する責任がある場合は、adminsノードに自分のUIDを記録するとすぐに管理者である特別な動的リンクまたはワークフローを定義します。 – jirungaray

関連する問題