Перейти к консоли

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

本文档将指导您将现有的 Web 应用和 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/6.6.2/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 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();

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

无参 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 小时之后过期。

如需查看可用方法的完整列表,请参阅适用于 WebNode.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