2017-09-04 6 views
1

データにアクセスできる制限付き電子メールのリストを作成したいクライアントがあります。だから、誰かがアプリケーションに来ても、全くデータを読み書きすることはできません(理想的にはログインすることはできませんが、Firebaseでは可能ではないと思いますか?)。これについてどうやって行くかについてのアイデア?私は受け入れられた電子メールの配列を持って、電子メールがセキュリティルールに存在するかどうかをチェックしていたが、それはうまくいかないと思っていた。セキュリティルールで電子メールでFirebaseユーザを制限する

"validEmails": ["[email protected]"]

、その後:私は、データベースに次のように持っていた

".read": "root.child('validEmails').val().indexOf(auth.token.email) > -1"

しかし、あなたがそれらのセキュリティルールでindexOfを使用することはできませんように見えます。

おそらく私は受け入れ可能な電子メールのリストを持っている必要がありますし、ユーザーがサインアップすると、そのリストに入っているかどうかをチェックし、そのUIDを受け入れられたリストに追加しますか?私は雲の機能などでこれを行うことができると思いますか?

ご協力いただければ幸いです。

乾杯

+0

"これはうまくいかなかったようです。"これはうまくいきました。質問を編集して[試した内容を再現する最小限のコード]を含めてください(http://stackoverflow.com/help/mcve)。より一般的な「ドメインごとのデータベースをロックする」については、この回答も参照してください。https://stackoverflow.com/questions/36943350/how-do-i-lock-down-firebase-database-to-any-user-from-a -specific-email-domain –

+0

申し訳ありませんが、私が試したコードが反映されないように質問を更新しました。 –

答えて

0

みんなありがとう、私は許容可能な電子メールのリストを持っていたやってしまった何を:

{ 
    "validEmails": ["[email protected]"], 
    "validUsers": {} 
} 

をして、自分の電子メールが有効な電子メールリストにあった場合は、ユーザーがサインアップしたときにチェックするために、クラウド機能の実行を持っています。それが有効なユーザーリストに追加されていれば、新しく作成されたユーザーを削除します。また、私はvalidUsers内のユーザーだけがデータにアクセスできるようにデータルールを設定しました。

その後、フロントエンドは無効なユーザーのリダイレクトなどを処理しました。

+0

メールが有効なメールリストに登録されている場合に、ユーザーがサインアップしたときに確認するクラウド機能を実行する方法を教えてください。ありがとう! –

+1

@AníbalRiveroFirebaseでは[クラウド機能](https://firebase.google.com/docs/functions/)を書くことができます。これは基本的にはnode.jsサーバー上で動作するjavascriptです。彼らは特定のアクションに接続し、何かに応答してコードを実行できるようにします。上記の例では、 'functions.auth.user()。onCreate()'を使用して、登録したばかりのユーザーが有効な電子メールのリストに電子メールを持っているかどうかを確認しています。そうでなければ、それらは削除されます。 –

0

あなたがFirebaseの認証モジュールを有効にすると、私はあなたの電子メールアドレスまたはドメインにそれを制限することはできませんと信じています。ただし、データベースを別の方法で保護することもできます。ユーザーがすでに登録されており、そのユーザーがuidであることがわかっている場合は、これらに基づいて読み取りと書き込みのアクセスを制限できます。

データベースにaclオブジェクトがあると思われる場合は、そのユーザーとその読み取り/書き込み権限を持つuidを一覧表示できます。

これらのルールは各リクエストを確認し、許可されたユーザーのみがデータにアクセスできるようにします。

{ 
    "acl": { 
    [ 
     { 
     "uid: "abc123" 
     "canRead": true, 
     "canWrite": true 
     }, 
     { 
     "uid": "def456", 
     "canRead": true, 
     "canWrite": false 
     } 
    }, 
    "secure": { 
    ".read": { root.child('acl').child(auth.uid).child('canRead').val() == true } 
    ".write": { root.child('acl').child(auth.uid).child('canWrite').val() == true } 
    } 
} 
+0

ありがとう、私はこれが本当かどうか疑問に思った。私は、クライアントが状況にアプローチし、これを中心に構築することを再考しなければならないでしょう。 –

0

は、データベース内の許可されたユーザの電子メールのリストを持っている:

"whitelist": { 
    "[email protected]%2Ecom": true, 
    "[email protected]%2Ecom": true 
} 

期間がキーで許可されていないので、あなたがそれらを格納する前にピリオドを含む文字列をエスケープする必要があります。そして、データベースルールで

{ 
    "rules": { 
     "whitelist": { 
      ".read": false, 
      ".write": false 
     }, 
     ".read": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()", 
     ".write": "root.child('whitelist').child(auth.token.email.replace('.', '%2E')).exists()" 
    } 
} 

ユーザーの電子メールがauth.token.emailを介してアクセス可能です。あなたはドット(. - >%2E)をエスケープし、キーがホワイトリストに存在するかどうかを確認する必要があります。

これらのルールでは、誰もデータベースの/whitelistセクションへの読み取りまたは書き込みアクセスを許可していません。変更はfirebaseコンソールでのみ可能です。

関連する問題