从 Firebase.com 升级您的网页应用/Node.js 应用

本文档将指导您将现有的网页应用和 Node.js 应用从 Firebase.com 升级到新的 Firebase 控制台和 3.x SDK。

完成升级共需三个步骤:

  1. 将您的项目导入至新的 Firebase 控制台
  2. 更新您的数据库代码
  3. 更新您的身份验证代码

您可随时导入项目。您的应用和现有 SDK 可继续照常工作。当准备好在自己的应用中使用某些新 Firebase 功能时,您就可以更新自己的代码。

将您的项目导入 Firebase 控制台

  • 转到 Firebase 控制台并在“Firebase.com 上的现有项目”下找到您的项目。
  • 针对您要升级的项目点击导入
    • 如果您的项目使用了 firebase.com 上的某种付费套餐,您将需要在新控制台中为该项目设置结算信息。您的结算信息不会自动迁移
    • 选择或创建一个结算帐号。在导入之后,此帐号会负责该项目的所有费用。
  • 系统会自动并即时将您的实时数据库和托管内容导入到 Firebase 控制台
  • 您的用户数据会自动迁移到新的身份验证后端。这一切都会在后台进行,您的用户可以在数据迁移时继续使用应用。用户注册和登录不会受到影响。当系统迁移用户帐号时,在 Firebase 控制台的“身份验证”标签中会显示旋转进度条。
  • 如果您有 Firebase.com 应用的有效促销代码,请与我们联系

升级您的 Firebase 命令行界面 (CLI)

升级后的项目若要使用命令行界面,则需安装 3.0 或更高版本。如想安装,请运行:

npm install -g firebase-tools

安装了最新版本的 Firebase 命令行界面后,您需要运行 firebase login 来重新验证身份。要为持续集成服务器或其他无头系统获取一个新令牌,请运行 firebase login:ci

最后,您需要在已迁移的 Firebase.com 项目的各个项目目录中运行 firebase tools:migrate

更新您的客户端版本

您不必立即更新应用的代码。现有数据库和身份验证代码仍然适用于您已升级的项目。但是,当您准备好开始在应用中使用某些新的 Firebase 功能时,可以按照下述步骤将数据库代码迁移至新的 API。

开始更新的最简单方法是更改您的脚本,包括:

升级之前

<script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"></script>
之后

<script src="https://www.gstatic.com/firebasejs/5.5.5/firebase.js"></script>

如果您迁移的是 Node.js 应用,可以使用以下命令下载最新版本的 firebase npm 软件包(为确保 firebase 未固定为 2.X 版本,您可在安装最新版之前将其卸载):

$ npm uninstall firebase --save
$ npm install firebase --save

获取数据库引用

在新 SDK 中,您不再通过 new Firebase 实例化数据库引用,而是通过 firebase.initializeApp() 来初始化 SDK:

升级之前

var ref = new Firebase("https://databaseName.firebaseio.com");
之后

// See https://firebase.google.com/docs/web/setup#project_setup for how to
// auto-generate this config
var config = {
  apiKey: "apiKey",
  authDomain: "your-firebase-project-id.firebaseapp.com",
  databaseURL: "https://databaseName.firebaseio.com"
};

firebase.initializeApp(config);

var rootRef = firebase.database().ref();

您可以按照网页应用设置页面中的说明自动生成上面的配置。

一些无参 getter 现为只读属性

许多无参 getter 已更改为只读属性:

升级之前

// Reference
var key = ref.key();
var rootRef = ref.root();
var parentRef = ref.parent();

// Query
var queryRef = query.ref();

// DataSnapshot
ref.on("value", function(snapshot) {
  var dataRef = snapshot.ref();
  var dataKey = snapshot.key();
});
之后

// Reference
var key = ref.key;
var rootRef = ref.root;
var parentRef = ref.parent;

// Query
var queryRef = query.ref;

// DataSnapshot
ref.on("value", function(snapshot) {
  var dataRef = snapshot.ref;
  var dataKey = snapshot.key;
});

更新您的身份验证代码

Firebase 身份验证功能现存在于其自己的 firebase.auth() 服务之中,许多方法已重命名。下例即介绍了如何使用 OAuth 提供程序对用户进行身份验证:

升级之前

ref.authWithOAuthPopup("twitter", function(error, authData) {
  if (error) {
    // An error occurred
    console.error(error);
  } else {
    // User signed in!
    var uid = authData.uid;
  }
});
之后

var auth = firebase.auth();

var provider = new firebase.auth.TwitterAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
  // User signed in!
  var uid = result.user.uid;
}).catch(function(error) {
  // An error occurred
});

下面介绍了如何在 2.x API 和新 API 中使用自定义令牌登录:

升级之前

ref.authWithCustomToken(AUTH_TOKEN, function(error, authData) {
  if (error) {
    console.log("Login Failed!", error);
  } else {
    console.log("Login Succeeded!", authData);
  }
});
之后

firebase.auth().signInWithCustomToken(AUTH_TOKEN).catch(function(error) {
  // Handle Errors here.
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});

您在服务器上生成的自定义令牌有了一种新格式。您可以使用适用于 Node.js 和 Java 的 Firebase Admin SDK 来创建自定义令牌(与新 API 兼容的令牌),也可以用第三方 JWT 库创建自定义令牌

请注意,与 2.x API 的帮助程序库(默认情况下这些帮助程序库生成的令牌会在 24 小时之后过期)不同,Firebase Admin SDK 生成的自定义令牌会在 1 小时之后过期。

如需查看可用方法的完整列表,请参阅适用于网页Node.js 的身份证验证 API 参考信息。

获取访问令牌

借助 Firebase.com 身份验证 API,您可以轻松使用提供程序的访问令牌来调用提供程序的 API,并获取附加信息。此访问令牌仍可使用,但只能在完成登录操作后立即使用。

升级之前

ref.onAuth(function(authData) {
  if (authData) {
    var accessToken = authData.providerData[authData.provider].accessToken;
  }
})
之后

var auth = firebase.auth();

var provider = new firebase.auth.GoogleAuthProvider();
auth.signInWithPopup(provider).then(function(result) {
  var accessToken = result.credential.accessToken;
});

由于 Firebase 身份验证不再保留访问令牌,因此如有需要,您的应用必须自己保留。

监控身份验证状态

用于监控身份验证状态的方法名称和回调参数略有变化:

升级之前

ref.onAuth(function(authData) {
  if (authData) {
    // User signed in!
    var uid = authData.uid;
  } else {
    // User logged out
  }
});
之后

var auth = firebase.auth();

auth.onAuthStateChanged(function(user) {
  if (user) {
    // User signed in!
    var uid = user.uid;
  } else {
    // User logged out
  }
});

迁移现有登录用户

如果用户已使用旧版 SDK 登录到应用中,那么您将需要编写一小段代码,通过新 SDK 让他们保持登录状态。否则,他们将不得不再次登录。您可在 Firebase 身份验证迁移帮助程序 GitHub 代码库中找到用于执行此操作的开放源示例代码。

对新密码重置模板进行更新

如果您的应用允许用户通过电子邮件与密码身份验证登录方式登录,则还可能向这些用户提供了重设密码的选项。

您升级为新 SDK 后,这些密码重置电子邮件将使用在 Firebase 控制台中指定的新模板。请务必更新这些模板,以满足应用的需要。

更新 Firebase 库

如果您在使用下列任何库,则需要升级为最新版本。

支持的版本 资源
AngularFire 2.x.x Github
ReactFire 1.x Github
GeoFire 4.1.x Github

发送以下问题的反馈:

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