Flutter Firebase认证插件firebase_auth_rest的使用

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

Flutter Firebase认证插件firebase_auth_rest的使用

简介

firebase_auth_rest 是一个基于 REST API 的平台无关 Dart/Flutter 包装器,用于与 Firebase Authentication 进行交互。它提供了一个纯 Dart 实现,可以在所有支持 Dart 的平台上工作,并且支持所有登录方法和自动后台刷新。

主要特性

  • 纯 Dart 实现:适用于所有 Dart 支持的平台。
  • 使用官方 REST API 端点
  • 高级类管理认证和用户
  • 支持多个并行登录
  • 支持自动后台刷新
  • 支持所有登录方法
  • 提供低级 REST 类以直接访问 API(导入 firebase_auth_rest/rest.dart)。

安装

pubspec.yaml 文件中添加 firebase_auth_rest 并运行 flutter pub get

dependencies:
  firebase_auth_rest: ^最新版本号

使用说明

firebase_auth_rest 库主要由两个类组成:FirebaseAuthFirebaseAccount

  • FirebaseAuth 类用于执行与特定登录用户不直接相关的全局 API 操作,例如创建账户、登录用户或重置密码。
  • FirebaseAccount 类持有用户的认证数据(如 ID-Token),并可用于执行各种与账户相关的操作,例如更改用户邮箱地址或获取完整的用户信息。它还会自动刷新用户的凭证(除非禁用)。

示例代码

以下是一个简单的示例,演示了如何使用 firebase_auth_rest 进行匿名登录、打印凭据和账户详细信息,最后永久删除账户。

完整示例代码 (main.dart)

// ignore_for_file: avoid_print
import 'dart:io';
import 'package:firebase_auth_rest/firebase_auth_rest.dart';
import 'package:http/http.dart' as http;

Future<void> main(List<String> arguments) async {
  final client = http.Client();
  try {
    // 创建一个 FirebaseAuth 实例
    if (arguments.isEmpty) {
      print('请提供您的 API-Key 作为第一个参数,并确保启用了匿名身份验证!');
      exitCode = 127;
      return;
    }
    final fbAuth = FirebaseAuth(client, arguments[0], 'en-US');

    // 登录,设置 autoRefresh 为 true 以自动刷新 idToken
    print('正在匿名登录...');
    final account = await fbAuth.signUpAnonymous(autoRefresh: false);
    try {
      // 打印 localId 和 idToken
      print('Local-ID: ${account.localId}');
      print('ID-Token: ${account.idToken}');

      // 获取并打印用户信息
      print('加载用户信息...');
      final userInfo = await account.getDetails();
      print('用户信息: $userInfo');

      // 删除账户
      print('正在删除账户...');
      await account.delete();
      print('账户已删除!');
    } finally {
      // 释放资源
      await account.dispose();
    }
  } catch (e) {
    print(e);
    print(
      '请提供您的 API-Key 作为第一个参数,并确保启用了匿名身份验证!',
    );
    exitCode = 127;
  } finally {
    // 关闭客户端 - fbAuth 和所有关联的账户将停止工作
    client.close();
  }
}

注意事项

  • 请确保在 Firebase 控制台中启用了匿名身份验证。
  • API-KEY 替换为您的 Firebase 项目的 API 密钥。
  • 如果您需要处理更多类型的认证方式(如电子邮件/密码、Google、Facebook 等),可以参考 官方文档 或者查看 完整示例

文档

更多详细信息和功能,请参阅 官方文档

希望这个指南能帮助您更好地理解和使用 firebase_auth_rest 插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


在Flutter中使用firebase_auth_rest插件进行Firebase认证时,你可以直接与Firebase认证服务进行HTTP请求,而不是使用官方的Firebase SDK。这种方式适合需要在后端进行更多自定义逻辑处理或者在非官方支持的环境中集成Firebase认证的场景。

以下是一个简单的示例,展示了如何使用http包与Firebase认证服务进行交互,包括注册新用户和使用邮箱/密码登录。请注意,实际使用时你需要替换示例中的YOUR_API_KEYYOUR_PROJECT_ID为你的Firebase项目信息。

首先,确保在pubspec.yaml文件中添加http依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 请检查最新版本

然后,在你的Dart文件中实现以下代码:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Firebase Auth REST Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  await signUpUser(
                    email: 'user@example.com',
                    password: 'securePassword123',
                  );
                },
                child: Text('Sign Up'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  await signInUser(
                    email: 'user@example.com',
                    password: 'securePassword123',
                  );
                },
                child: Text('Sign In'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Future<void> signUpUser({required String email, required String password}) async {
  final apiKey = 'YOUR_API_KEY';
  final projectId = 'YOUR_PROJECT_ID';
  final url = 'https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=$apiKey';

  final body = jsonEncode({
    'email': email,
    'password': password,
    'returnSecureToken': true,
  });

  final response = await http.post(
    Uri.parse(url),
    headers: <String, String>{
      'Content-Type': 'application/json',
    },
    body: body,
  );

  if (response.statusCode == 200 || response.statusCode == 201) {
    final data = jsonDecode(response.body);
    print('User signed up successfully: ${data}');
  } else {
    throw Exception('Failed to sign up user: ${response.statusCode}');
  }
}

Future<void> signInUser({required String email, required String password}) async {
  final apiKey = 'YOUR_API_KEY';
  final projectId = 'YOUR_PROJECT_ID';
  final url = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=$apiKey';

  final body = jsonEncode({
    'email': email,
    'password': password,
    'returnSecureToken': true,
  });

  final response = await http.post(
    Uri.parse(url),
    headers: <String, String>{
      'Content-Type': 'application/json',
    },
    body: body,
  );

  if (response.statusCode == 200) {
    final data = jsonDecode(response.body);
    print('User signed in successfully: ${data}');
  } else {
    throw Exception('Failed to sign in user: ${response.statusCode}');
  }
}

在这个示例中:

  1. signUpUser函数用于注册新用户。
  2. signInUser函数用于用户登录。

这两个函数都向Firebase的认证服务发送HTTP POST请求,请求体中包含用户的邮箱和密码,以及一个returnSecureToken参数,该参数设置为true以请求返回Firebase的认证令牌。

请注意,使用这种方法时,你需要确保你的Firebase项目允许通过HTTP请求进行认证操作,并且你已经正确设置了API密钥和项目ID。此外,出于安全考虑,不建议在客户端直接暴露API密钥,通常会在后端服务器上进行这些操作,然后将结果安全地传递给客户端。

回到顶部