2016-06-19 10 views
4

私は、それがユーザ認証モジュール用に使用しているFirebaseプロジェクトをセットアップしました。私もGithubのfirebaseui-webプロジェクトを使用しています。Firebase - サインアップしたが検証されていない電子メールのユーザを認証する

サインオンでの私のリダイレクトは、このコードごとに正常に動作している:

// FirebaseUI config. 
var uiConfig = { 
    'signInSuccessUrl': 'MY_REDIRECT.html', 
    'signInOptions': [ 
    firebase.auth.EmailAuthProvider.PROVIDER_ID 
    ], 
    // Terms of service url. 
    'tosUrl': '<your-tos-url>', 
}; 

ページのロード(すなわちMY_REDIRECT.html)私は、彼らが自分を確認したかどうかを確認するために、ユーザーの状態をチェックしています電子メール、その後、起動しない場合sendEmailVerificationmethod

checkLoggedInUser = function() { 
    auth.onAuthStateChanged(function(user) { 
    if (user) { 
     // is email verified 
     if(user.emailVerified) { 
     // show logged in user in UI 
     $('#loggedinUserLink').html('Logged in:' + user.email + '<span class="caret"></span>');   
     } else { 
     // user e-mail is not verified - send verification mail and redirect 
     alert('Please check your inbox for a verification e-mail and follow the instructions'); 
     // handle firebase promise and don't redirect until complete i.e. .then 
     user.sendEmailVerification().then(function() { 
      window.location.replace('index.html'); 
     }); 
     } 
    } else { 
     // no user object - go back to index 
     window.location.replace("index.html"); 
    } 
    }, function(error) { 
    console.log(error); 
    }); 
}; 

window.onload = function() { 
    checkLoggedInUser() 
}; 

すべてのこれまでのところ良い - Firebaseは私が欲しいものをやっています!ありがとうございました:)

しかし、FirebaseコンソールのUIでは、ユーザーが実際に自分の受信ボックスに行き、そのリンクをクリックして検証を実行したかどうかを確認する方法はありません。私は基本的なテストを実行したとUIDを検証する前と後に変更されないユーザーが行われた

enter image description here

:UIは次のようになります。

これは私の質問です。電子メールの確認は正しく行われましたか?もしそうなら(したがって、検証されていないものと検証されていないものがUIに表示されない)、Authモジュールでこれらの2つのユーザーセットにアクセスする方法はありますか? UIDの基礎となるテーブルとそのプロパティ(emailVerifiedプロパティを含む)にアクセスする方法がわかりません。機能がコンソールになければ、コードを書く必要はありません。私の次のステップの正しい方向に向かうように探しています。

答えて

7

現在、Firebaseコンソールには、特定のユーザの電子メールアドレスが確認されているかどうかを確認する方法はありません。 API to get a list of usersですが、確認済みかどうかはフィルタできません。

現在、認証されたユーザの電子メールアドレスを用いて検証されているかどうかを確認することができます。

firebase.auth().currentUser.emailVerified 

あなたがサインアップする誰防ぐことはできません。しかし、確認された電子メールアドレスを持つユーザーだけが(特定の)データにアクセスできることを容易に確認できます。たとえば:

{ 
    "rules": { 
    ".read": "auth != null && auth.token.email_verified", 
    "gmailUsers": { 
     "$uid": { 
     ".write": "auth.token.email_verified == true && 
        auth.token.email.matches(/.*@gmail.com$/)" 
     } 
    } 
    } 
} 

上記のルールは、検証済みのメールアドレスを持つユーザーのみが任意のデータを読み取ることができ、検証Gmailアドレスを持つユーザーのみがgmailUsersの下で書くことができることを確認してください。

+0

説明していただきありがとうございます。このロジックを使用して、私の好みは、サイトを使用したいユーザーの真の連絡先情報を収集できるように、 'mickey @ mouse.com'のような電子メールでサインアップするのを防ぐためです。あなたは私のところで別のアプローチをお勧めしますか?偽の電子メールアドレスを知る能力は合理的な必要条件であると私は思います。ソーシャルメディアログインを使用することでこれを回避できることが理解されています。再度、感謝します。 –

+0

私のプロジェクトのユーザーの完全なリストにアクセスする方法はありませんか?それはちょっと変わったようです - 新しい人がサインアップするときにセカンダリデータベースを構築するための回避策ですか?私は何かを誤解しなければならないと感じている。それが適切であれば、新しい質問を開始するように私に依頼してください。 –

+0

誰かがこれを見つけたら、ここに行きます:http://stackoverflow.com/questions/35613533/query-registered-users-details-in-firebase?rq=1 –

関連する問題