Flutter自动生成API密钥插件generate_api_key的使用
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
可以是StringApiKeyResults
或BatchApiKeyResults
。例如:
生成选项
以下是可用的各种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
: 生成方法的类型及其特定选项(例如,StringGenerationOptions
,UuidV4GenerationOptions
)。
错误处理
该类执行验证,并将在提供无效选项时抛出异常,例如批次大小的非自然数或命名空间选项中的无效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
更多关于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应用的界面上。你可以根据具体需求调整密钥的长度和生成逻辑。