6

ユーザー認証モジュールに使用しているFirebaseプロジェクトをセットアップしました。Github のfirebaseui-webプロジェクトも使用しています。

サインオン時のリダイレクトは、次のコードに従って正常に機能しています。

// 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 など)、ユーザーのステータスをチェックして、電子メールが確認されているかどうかを確認し、確認されていない場合はsendEmailVerification メソッドを呼び出します。

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 では、ユーザーが実際に受信トレイにアクセスしてリンクをクリックして検証を実行したかどうかを確認する方法はないようです。UI は次のようになります。

ここに画像の説明を入力

基本的なテストを実行しましたが、ユーザー UID は検証の前後で変化しません。

では、ここで私の質問です。電子メールの検証は正しく行われましたか? そうである場合 (したがって、UI には検証済みと未検証が表示されません)、Auth モジュールでこれら 2 つのユーザー セットにアクセスするための受け入れられた方法はありますか? UID とそのプロパティ (プロパティを含む) の基になるテーブルにアクセスする方法がわかりませんemailVerified。機能がコンソールにない場合、さらにコードを記述しなければならないことは気にしません。次のステップのために正しい方向に微調整するだけです。

4

1 に答える 1

11

現在、Firebase コンソールで特定のユーザーのメール アドレスが確認されているかどうかを確認する方法はありません。ユーザーのリストを取得するためのAPIがあります、検証済みかどうかでフィルタリングすることはできません。

現在認証されているユーザーの電子メール アドレスが検証されているかどうかは、次の方法で確認できます。

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

于 2016-06-19T14:43:32.853 に答える