Flutter Firebase管理插件firebase_admin_sdk的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter Firebase管理插件firebase_admin_sdk的使用

firebase_admin_sdk 是一个纯 Dart 实现的 Firebase 管理 SDK。目前,它仅支持以下 Firebase 服务的管理员方法:

  • 身份验证(Authentication)
  • 实时数据库(Realtime Database)

完整示例Demo

下面是一个完整的示例代码,展示了如何使用 firebase_admin_sdk 来管理 Firebase 的身份验证和实时数据库。

import 'package:firebase_admin/firebase_admin.dart';

void main() async {
  // 初始化 Firebase Admin SDK
  var serviceAccount = ServiceAccount.fromMap({
    "type": "service_account",
    "project_id": "your-project-id",
    "private_key_id": "your-private-key-id",
    "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
    "client_email": "firebase-adminsdk-xxx@your-project-id.iam.gserviceaccount.com",
    "client_id": "1170xxxxx9805",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-xxx%40your-project-id.iam.gserviceaccount.com"
  });

  // 创建一个新的应用实例
  var app = FirebaseApp(
    name: 'default',
    credential: EmailAuthProvider.credential(
      email: 'your-email@example.com',
      password: 'your-password',
    ),
  );

  // 获取身份验证实例
  var auth = FirebaseAuth.instanceFor(app: app);

  // 创建一个新用户
  await auth.createUser(
    email: 'test@example.com',
    password: 'password123',
  );

  // 登录用户
  var userCredential = await auth.signInWithEmailAndPassword(
    email: 'test@example.com',
    password: 'password123',
  );
  print('User signed in: ${userCredential.user?.email}');

  // 获取实时数据库实例
  var db = FirebaseDatabase.instanceFor(app: app);

  // 在数据库中创建一个新节点
  var ref = db.reference().child('users/test');
  await ref.set({'name': 'John Doe', 'age': 30});

  // 读取数据
  var snapshot = await ref.once();
  print('Data: ${snapshot.value}');

  // 关闭应用
  await app.delete();
}

代码说明

  1. 初始化 Firebase Admin SDK:

    var serviceAccount = ServiceAccount.fromMap({
      // 从你的服务账号 JSON 文件中获取这些值
    });
    
  2. 创建一个新的应用实例:

    var app = FirebaseApp(
      name: 'default',
      credential: EmailAuthProvider.credential(
        email: 'your-email@example.com',
        password: 'your-password',
      ),
    );
    
  3. 获取身份验证实例并创建用户:

    var auth = FirebaseAuth.instanceFor(app: app);
    await auth.createUser(
      email: 'test@example.com',
      password: 'password123',
    );
    
  4. 登录用户并打印登录信息:

    var userCredential = await auth.signInWithEmailAndPassword(
      email: 'test@example.com',
      password: 'password123',
    );
    print('User signed in: ${userCredential.user?.email}');
    
  5. 获取实时数据库实例并在数据库中创建一个新节点:

    var db = FirebaseDatabase.instanceFor(app: app);
    var ref = db.reference().child('users/test');
    await ref.set({'name': 'John Doe', 'age': 30});
    
  6. 读取数据并打印:

    var snapshot = await ref.once();
    print('Data: ${snapshot.value}');
    
  7. 关闭应用:

    await app.delete();
    

更多关于Flutter Firebase管理插件firebase_admin_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Firebase管理插件firebase_admin_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,firebase_admin_sdk 并不是一个官方或广泛认可的插件名称。通常,Flutter 项目中管理 Firebase 的插件是由 Firebase 官方提供的一系列插件,例如 firebase_corefirebase_authcloud_firestore 等。这些插件允许你在 Flutter 应用中集成 Firebase 的各种服务。

如果你是指在后端(如 Node.js 服务器)使用 Firebase Admin SDK 来管理 Firebase 项目,那么这通常是在服务器端环境中完成的,而不是直接在 Flutter 应用中。Flutter 应用通常会通过 Firebase 客户端 SDK 与 Firebase 服务进行交互。

不过,为了说明如何在服务器端(例如使用 Node.js)使用 Firebase Admin SDK,我可以提供一个简单的代码示例。这个示例将展示如何初始化 Firebase Admin SDK 并验证一个用户的身份令牌(通常是从 Flutter 应用中获取的 Firebase Authentication ID Token)。

Node.js 服务器端代码示例

  1. 安装 Firebase Admin SDK

    首先,你需要在你的 Node.js 项目中安装 Firebase Admin SDK。你可以使用 npm 或 yarn 来完成这个操作。

    npm install firebase-admin
    
  2. 初始化 Firebase Admin SDK

    接下来,你需要初始化 Firebase Admin SDK。这通常涉及到从 Firebase 控制台下载一个服务帐户密钥文件(JSON 格式),并在你的代码中指定其路径。

    const admin = require('firebase-admin');
    const serviceAccount = require('path/to/serviceAccountKey.json');
    
    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: "https://<your-database-name>.firebaseio.com"
    });
    
  3. 验证 Firebase Authentication ID Token

    现在,你可以使用 Firebase Admin SDK 来验证从 Flutter 应用中获取的 Firebase Authentication ID Token。

    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    
    app.use(bodyParser.json());
    
    app.post('/verify-token', async (req, res) => {
      const idToken = req.body.idToken;
    
      try {
        const decodedToken = await admin.auth().verifyIdToken(idToken);
        const uid = decodedToken.uid;
    
        // 你可以在这里添加额外的逻辑,比如根据用户 ID 从数据库中获取用户信息
        res.status(200).json({ success: true, uid: uid });
      } catch (error) {
        console.error('Error verifying Firebase ID token:', error);
        res.status(403).json({ success: false, message: 'Invalid ID token.' });
      }
    });
    
    const PORT = process.env.PORT || 5000;
    app.listen(PORT, () => {
      console.log(`Server is running on port ${PORT}`);
    });
    

    在这个示例中,我们创建了一个简单的 Express 服务器,它监听一个 /verify-token 端点。当这个端点接收到一个包含 idToken 的 POST 请求时,它会尝试验证该令牌,并返回用户的 UID(如果验证成功)或错误消息(如果验证失败)。

Flutter 客户端代码示例

虽然这个回答的重点是 Firebase Admin SDK 的使用,但这里简要说明一下如何从 Flutter 应用中获取 Firebase Authentication ID Token。

import 'package:firebase_auth/firebase_auth.dart';

Future<String?> getIdToken() async {
  final FirebaseAuth auth = FirebaseAuth.instance;
  final User? user = auth.currentUser;
  if (user != null) {
    final IdTokenResult result = await user.getIdToken(true);
    return result.token;
  } else {
    return null;
  }
}

你可以调用 getIdToken 函数来获取当前用户的 ID Token,并将其发送到你的服务器进行验证。

希望这个回答能帮助你理解如何在服务器端使用 Firebase Admin SDK,并与 Flutter 应用进行交互。如果你有任何其他问题,请随时提问!

回到顶部