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

您可以用 Firebase 身份验证功能创建和使用临时匿名帐号来进行 Firebase 身份验证。借助这些临时匿名帐号,尚未注册您应用的用户也可以处理受安全规则保护的数据。如果匿名用户决定注册您的应用,您可以将其登录凭据与其匿名帐号关联,这样他们就可以在以后的会话中继续处理其受保护的数据了。

准备工作

  1. 将 Firebase 添加到您的 JavaScript 项目
  2. 如果您尚未将应用关联到 Firebase 项目,请从 Firebase 控制台关联。
  3. 启用匿名身份验证:
    1. Firebase 控制台中,打开 Authentication(身份验证)部分。
    2. 登录方法页面中,启用匿名登录方法。

匿名进行 Firebase 身份验证

要使未登录的用户能够使用需要进行 Firebase 身份验证的应用功能,您可以按以下步骤操作,让用户匿名登录:

  1. 调用 signInAnonymously 方法:
    firebase.auth().signInAnonymously().catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // ...
    });
    
    您还可以通过这种方法捕捉并处理错误。要获取错误代码列表,请参阅身份验证参考文档
  2. 如果 signInAnonymously 方法顺利完成,未出现任何错误,在 onAuthStateChanged 中注册的观察者就会触发,且您可以从 User 对象中获取匿名用户的帐号数据:
    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        var isAnonymous = user.isAnonymous;
        var uid = user.uid;
        // ...
      } else {
        // User is signed out.
        // ...
      }
      // ...
    });

将匿名帐号转成永久帐号

当匿名用户注册您的应用时,您可能需要允许其使用新帐号继续之前的操作。例如,您可能需要将用户在注册之前添加到购物车中的商品移到其新帐号的购物车中。为此,请完成以下步骤:

  1. 当用户注册时,按照用户身份验证提供方的登录流程逐步进行,直到调用某一 Auth.signInWith 方法的前一步时停止。调用的例子包括:获取用户的 Google ID 令牌、Facebook 访问令牌或电子邮件地址和密码。
  2. 为新身份验证提供方获取 AuthCredential

    Google 登录
    var credential = firebase.auth.GoogleAuthProvider.credential(
        googleUser.getAuthResponse().id_token);
    
    Facebook 登录
    var credential = firebase.auth.FacebookAuthProvider.credential(
        response.authResponse.accessToken);
    
    电子邮件地址/密码登录
    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
    
  3. AuthCredential 对象传递给已登录用户的 link 方法:

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

如果对 link 的调用成功,用户的新帐号就可以使用匿名帐号的 Firebase 数据了。

后续步骤

至此,用户可以进行 Firebase 身份验证,而您也可以使用 Firebase 规则控制用户对您 Firebase 数据库中的数据的访问权限。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面