Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

使用 JavaScript 匿名使用 Firebase 進行身份驗證

您可以使用 Firebase 身份驗證來創建和使用臨時匿名帳戶向 Firebase 進行身份驗證。這些臨時匿名帳戶可用於允許尚未註冊您的應用程序的用戶使用受安全規則保護的數據。如果匿名用戶決定申請到您的應用程序,你可以聯繫他們的登錄憑據匿名帳戶,以便他們可以繼續工作,在今後的會議所保護的數據。

在你開始之前

  1. 添加火力地堡到你的JavaScript項目
  2. 如果您還沒有連接您的應用程序到你的火力地堡項目,從這樣做火力地堡控制台
  3. 啟用匿名身份驗證:
    1. 火力地堡控制台,打開驗證部分。
    2. 登錄的方法頁面上,啟用匿名登錄方法。

匿名使用 Firebase 進行身份驗證

當註銷的用戶使用需要通過 Firebase 進行身份驗證的應用功能時,請完成以下步驟以匿名登錄用戶:

  1. 調用signInAnonymously方法:

    網頁版 9

    import { getAuth, signInAnonymously } from "firebase/auth";
    
    const auth = getAuth();
    signInAnonymously(auth)
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    網頁版 8

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    這也是您可以捕獲和處理錯誤的地方。有關錯誤代碼列表,看看在驗證參考文檔
  2. 如果signInAnonymously方法完成沒有錯誤,在已註冊的觀察者onAuthStateChanged將觸發,你可以得到來自匿名用戶的帳戶數據User對象:

    網頁版 9

    import { getAuth, onAuthStateChanged } from "firebase/auth";
    
    const auth = getAuth();
    onAuthStateChanged(auth, (user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/firebase.User
        const uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

    網頁版 8

    firebase.auth().onAuthStateChanged((user) => {
      if (user) {
        // User is signed in, see docs for a list of available properties
        // https://firebase.google.com/docs/reference/js/firebase.User
        var uid = user.uid;
        // ...
      } else {
        // User is signed out
        // ...
      }
    });

將匿名帳戶轉換為永久帳戶

當匿名用戶註冊您的應用程序時,您可能希望允許他們使用新帳戶繼續工作——例如,您可能希望用戶在註冊之前添加到他們的購物車中的商品在新帳戶中可用帳戶的購物車。為此,請完成以下步驟:

  1. 當用戶註冊,完成登錄流程為用戶的身份驗證提供最多,但不包括調用的一個Auth.signInWith方法。例如,獲取用戶的 Google ID 令牌、Facebook 訪問令牌或電子郵件地址和密碼。
  2. 找一個AuthCredential新身份驗證提供:

    谷歌登錄

    網頁版 9

    import { GoogleAuthProvider } from "firebase/auth";
    
    const credential = GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);

    網頁版 8

    var credential = firebase.auth.GoogleAuthProvider.credential(
      googleUser.getAuthResponse().id_token);
    Facebook登入

    網頁版 9

    import { FacebookAuthProvider } from "firebase/auth";
    
    const credential = FacebookAuthProvider.credential(
      response.authResponse.accessToken);

    網頁版 8

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    電子郵件密碼登錄

    網頁版 9

    import { EmailAuthProvider } from "firebase/auth";
    
    const credential = EmailAuthProvider.credential(email, password);

    網頁版 8

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. 傳遞AuthCredential對象的登錄用戶的link方法:

    網頁版 9

    import { getAuth, linkWithCredential } from "firebase/auth";
    
    const auth = getAuth();
    linkWithCredential(auth.currentUser, credential)
      .then((usercred) => {
        const user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

    網頁版 8

    auth.currentUser.linkWithCredential(credential)
      .then((usercred) => {
        var user = usercred.user;
        console.log("Anonymous account successfully upgraded", user);
      }).catch((error) => {
        console.log("Error upgrading anonymous account", error);
      });

如果調用link成功,用戶的新帳戶可以訪問匿名帳戶的火力地堡數據。

下一步

現在,用戶可以與火力地堡進行身份驗證,就可以控制他們使用你的火力地堡數據庫中的數據訪問火力地堡規則