Flutter自动生成API密钥插件generate_api_key的使用

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

Flutter自动生成API密钥插件generate_api_key的使用

安装 💻

为了开始使用Generate Api Key,您必须在机器上安装Dart SDK

通过以下命令安装:

dart pub add generate_api_key

功能

  • 生成随机字符串形式的API密钥。
  • 生成基于UUID(v4和v5)的API密钥。
  • 使用Base32(Crockford编码)和Base62编码生成API密钥。
  • 支持批量生成API密钥。
  • 可以选择为生成的API密钥添加前缀。
  • 可以自定义随机字符串密钥的长度和字符池。

使用

要使用此工具,导入该包并创建一个带有所需选项的GenerateApiKey实例,该实例返回ApiKeyResults

ApiKeyResults可以是StringApiKeyResultsBatchApiKeyResults。例如:

生成选项

以下是可用的各种GenerationOptions及其描述:

选项类 描述
StringGenerationOptions() 生成随机字符串API密钥。允许指定长度和字符池。
BytesGenerationOptions() 基于随机字节生成密钥。适合用于加密目的。
Base32GenerationOptions() 使用Base32编码生成API密钥。可以选择是否包含破折号。
Base62GenerationOptions() 使用Base62编码生成API密钥。适用于紧凑且URL安全的密钥。
UuidV4GenerationOptions() 创建基于UUID版本4的API密钥。可以选择是否包含破折号。
UuidV5GenerationOptions() 生成基于UUID版本5的API密钥。需要命名空间和名称。也可以控制破折号的存在。

示例

随机字符串生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    prefix: 'pk',
    options: StringGenerationOptions(
      length: 20,
      pool: 'ABCDEFG1234567890',
    ),
  );

  final apiKey = generator.generateApiKey();
  print(apiKey); // pk.ECCC9398D9G2D3G26A1F
}

字节生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    prefix: 'sk',
    options: BytesGenerationOptions(
      length: 20,
    ),
  );
  final apiKey = generator.generateApiKey();
  print(apiKey); // sk.3020e804ce9bd6d07ce1
}

Base32生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    options: Base32GenerationOptions(
      dashes: true, // 包含破折号
    ),
  );
  final apiKey = generator.generateApiKey();
  print(apiKey); // 5BWBHH0-ED4447R-M19N2ZR-7SNRCF0
}

Base62生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    options: Base62GenerationOptions(),
    prefix: 'lk',
  );
  final apiKey = generator.generateApiKey();
  print(apiKey); // lk.1BVCstg6fFVStHkaKG6vqB
}

UUID v4生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    prefix: 'key',
    options: UuidV4GenerationOptions(
      dashes: false, // 不包含破折号
    ),
  );
  final apiKey = generator.generateApiKey();
  print(apiKey); // key.9ccfa90e505341c9814d7e91a861b550
}

UUID v5生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  const generator = GenerateApiKey(
    prefix: 'prod_app',
    options: UuidV5GenerationOptions(
      namespace: '596ac0ae-c4a0-4803-b796-8f239c8431ba',
      name: 'example',
      dashes: true,
    ),
  );
  final apiKey = generator.generateApiKey();
  print(apiKey); // prod_app.5abd62a0-c40c-5d1f-a6b8-536624f5bf7f
}

批量生成

import 'package:generate_api_key/generate_api_key.dart';

void main(List<String> args) {
  final batchGenerator = GenerateApiKey(
    prefix: 'sk',
    options: Base32GenerationOptions(),
    batch: 5, // 生成的密钥数量
  );

  final batchApiKeys = batchGenerator.generateApiKey();
  print(batchApiKeys);
  // [
    // sk.13EX4M8-FJ04BHR-KCN76H8-DMET5JR,
    // sk.YXR9P48-3NB4KQR-JE511BG-1TG9QZ0,
    // sk.PE5A2E0-H8C4JNR-MQ1AJ2G-BMZXHC8,
    // sk.45ETSK0-2KFMNE0-KJMS2JR-BXTS330,
    // sk.N8QCPH8-XPJ4RYG-PBYCYBR-6H8AZG8
  // ]
}

自定义

GenerateApiKey 类接受几个用于自定义的选项:

  • prefix: 每个生成的API密钥前缀的字符串。
  • batch: 一次性生成的API密钥数量。如果为null,则生成单个密钥。
  • options: 生成方法的类型及其特定选项(例如,StringGenerationOptionsUuidV4GenerationOptions)。

错误处理

该类执行验证,并将在提供无效选项时抛出异常,例如批次大小的非自然数或命名空间选项中的无效UUID。

安全性

在生成和存储API密钥和访问令牌时,请注意数据库存储的最佳安全实践。API密钥或访问令牌的存储是为了确认所提供的密钥/令牌(例如HTTP请求)有效并且由您的组织或应用程序颁发(就像密码一样)。就像密码一样,API密钥或访问令牌可以提供对需要认证的数据或服务的直接访问权限。

验证API密钥或访问令牌时,不必知道原始密钥/令牌值,只需要验证密钥/令牌是否正确。API密钥和访问令牌不应以明文形式存储在数据库中,而应存储为哈希值。在哈希过程中考虑使用数据库存储概念,如加盐或加胡椒。

最后,如果您怀疑您的组织或应用的API凭据已被泄露,请撤销密钥并重新生成新的密钥。

连续集成 🤖

Generate Api Key 配备了由 Very Good Workflows 提供的内置 GitHub Actions 工作流,但您也可以添加自己的首选 CI/CD 解决方案。

默认情况下,在每次拉取请求和推送时,CI 会格式化、检查和测试代码。这确保了代码的一致性和正确行为,即使您添加功能或进行更改。该项目使用 Very Good Analysis 来实现我们团队使用的严格分析选项。代码覆盖率使用 Very Good Workflows 强制执行。

运行测试 🧪

要运行所有单元测试:

dart pub global activate coverage 1.2.0
dart test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info

要查看生成的覆盖率报告,您可以使用 lcov

# 生成覆盖率报告
genhtml coverage/lcov.info -o coverage/

# 打开覆盖率报告
open coverage/index.html

更多关于Flutter自动生成API密钥插件generate_api_key的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动生成API密钥插件generate_api_key的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用generate_api_key插件自动生成API密钥的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了generate_api_key依赖:

dependencies:
  flutter:
    sdk: flutter
  generate_api_key: ^最新版本号  # 请替换为最新版本号

然后,运行以下命令以获取依赖项:

flutter pub get

接下来,在你的Flutter项目中,你可以按照以下步骤使用generate_api_key插件来生成API密钥。

1. 导入插件

在你的Dart文件中(例如main.dart),导入generate_api_key插件:

import 'package:generate_api_key/generate_api_key.dart';

2. 使用插件生成API密钥

你可以使用GenerateApiKey.generateKey方法来生成一个API密钥。下面是一个简单的示例,展示如何在按钮点击时生成并显示API密钥:

import 'package:flutter/material.dart';
import 'package:generate_api_key/generate_api_key.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'API Key Generator',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ApiKeyGeneratorScreen(),
    );
  }
}

class ApiKeyGeneratorScreen extends StatefulWidget {
  @override
  _ApiKeyGeneratorScreenState createState() => _ApiKeyGeneratorScreenState();
}

class _ApiKeyGeneratorScreenState extends State<ApiKeyGeneratorScreen> {
  String? apiKey;

  void _generateApiKey() async {
    String key = await GenerateApiKey.generateKey(length: 32);  // 你可以根据需要调整密钥长度
    setState(() {
      apiKey = key;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Generate API Key'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Generated API Key:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              apiKey ?? 'N/A',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: _generateApiKey,
              child: Text('Generate Key'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

现在,你可以运行你的Flutter应用,点击按钮即可生成并显示一个新的API密钥。

flutter run

这个示例展示了如何使用generate_api_key插件来生成API密钥,并将其显示在Flutter应用的界面上。你可以根据具体需求调整密钥的长度和生成逻辑。

回到顶部