Google 致力于为黑人社区推动种族平等。查看具体举措

使用 JavaScript 匿名通过 Firebase 进行身份验证

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

您可以使用 Firebase 身份验证来创建和使用临时匿名帐户来通过 Firebase 进行身份验证。这些临时匿名帐户可用于允许尚未注册您的应用的用户使用受安全规则保护的数据。如果匿名用户决定注册您的应用程序,您可以将他们的登录凭据链接到匿名帐户,以便他们可以在以后的会话中继续使用受保护的数据。

在你开始之前

  1. 将 Firebase 添加到您的 JavaScript 项目中。
  2. 如果您尚未将应用连接到 Firebase 项目,请从Firebase 控制台执行此操作。
  3. 启用匿名身份验证:
    1. Firebase 控制台中,打开Auth部分。
    2. 登录方法页面上,启用匿名登录方法。
    3. 可选:如果您已使用 Identity Platform 将项目升级到 Firebase 身份验证,则可以启用自动清理。启用此设置后,超过 30 天的匿名帐户将被自动删除。在启用自动清理的项目中,匿名身份验证将不再计入使用限制或计费配额。请参阅自动清理

匿名使用 Firebase 进行身份验证

当已注销的用户使用需要通过 Firebase 进行身份验证的应用功能时,请完成以下步骤以匿名方式登录该用户:

  1. 调用signInAnonymously方法:

    Web version 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;
        // ...
      });

    Web version 8

    firebase.auth().signInAnonymously()
      .then(() => {
        // Signed in..
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });
    这也是您可以捕获和处理错误的地方。有关错误代码的列表,请查看Auth Reference Docs
  2. 如果signInAnonymously方法完成没有错误,注册在onAuthStateChanged中的观察者将触发,您可以从User对象中获取匿名用户的帐户数据:

    Web version 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
        // ...
      }
    });

    Web version 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

    谷歌登录

    Web version 9

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

    Web version 8

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

    Web version 9

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

    Web version 8

    var credential = firebase.auth.FacebookAuthProvider.credential(
      response.authResponse.accessToken);
    电子邮件密码登录

    Web version 9

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

    Web version 8

    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  3. AuthCredential对象传递给登录用户的link方法:

    Web version 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);
      });

    Web version 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调用成功,则用户的新帐户可以访问匿名帐户的 Firebase 数据。

自动清理

如果您已使用 Identity Platform 将项目升级到 Firebase 身份验证,则可以在 Firebase 控制台中启用自动清理。当您启用此功能时,Firebase 会自动删除超过 30 天的匿名帐户。在启用自动清理的项目中,匿名身份验证将不计入使用限制或计费配额。

  • 在启用自动清理后创建的任何匿名帐户可能会在创建后 30 天后的任何时间自动删除。
  • 在启用自动清理之前创建的匿名帐户将有资格在启用自动清理后 30 天开始自动删除。
  • 如果您关闭自动清理,任何预定被删除的匿名帐户将保持预定被删除。这些帐户不计入使用限制或计费配额。
  • 如果您通过将匿名帐户链接到任何登录方法来“升级”匿名帐户,则该帐户不会被自动删除。

如果您想在启用此功能之前查看有多少用户会受到影响,并且您已将项目升级到使用 Identity Platform 的 Firebase 身份验证,则可以在Cloud Logging中按is_anon进行过滤。

下一步

现在用户可以使用 Firebase 进行身份验证,您可以使用Firebase 规则控制他们对 Firebase 数据库中数据的访问。