dart - 遵循最佳实践在颤振中存储 API 密钥的正确方法
问题描述
如果我想在 github 上推送代码,这是在颤振中添加秘密 API 密钥的正确方法(最佳实践)。我制作了一个使用 API 的简单应用程序,但我以粗鲁的方式使用密钥只是为了测试应用程序是否正常工作。通常根据我在后端开发应用程序的经验,密钥存储在某个地方和不同的文件中,然后只需将其导入需要的所需文件API_KEY
并排除文件中的.gitignore
文件。
到目前为止,我也实现了这种方法:
文件夹树
-lib
-auth
-keys.dart
-secrets.json
秘密.json
我将在此处添加KEY
并指定此文件,.gitignore
以便在我推送代码时将其排除在 github 中。
//Add API KEY HERE
{
"api_key": "ee4444444a095fc613c5189b2"
}
键.dart
import 'dart:async' show Future;
import 'dart:convert' show json;
import 'package:flutter/services.dart' show rootBundle;
class Secret {
final String apikey;
Secret({this.apikey=""});
factory Secret.fromJson(Map<String, dynamic>jsonMap){
return new Secret(apikey:jsonMap["api_key"]);
}
}
class SecretLoader {
final String secretPath;
SecretLoader({this.secretPath});
Future<Secret> load() {
return rootBundle.loadStructuredData<Secret>(this.secretPath,
(jsonStr) async {
final secret = Secret.fromJson(json.decode(jsonStr));
return secret;
});
}
}
我觉得这种方法太多了。我想得到更好的方法的建议。
解决方案
编辑:看看下面 J. Saw 的评论。
编辑 2: 底部描述的问题已在firebase-config 19.0.2
.
使用在 Firebase 控制台中,在菜单中,向下滚动到Firebase Remote Config
. Grow
,然后Remote Config
。在这里您可以添加一个带值的参数。完成后不要忘记发布更改。这有点微妙。
现在为 Flutter 安装firebase_remote_config。
导入所有内容后,您可以使用以下代码检索您的值:
RemoteConfig remoteConfig = await RemoteConfig.instance;
await remoteConfig.fetch(expiration: Duration(hours: 1));
await remoteConfig.activateFetched();
remoteConfig.getValue('key').asString();
这样,API 密钥或令牌就不会成为您应用程序的一部分。
注意:目前存在一个问题,您会收到一条警告,指出未设置应用程序的名称,但这不会影响功能。
推荐阅读
- javascript - 无法让某些按钮工作
- python-3.x - 使用 Beautiful Soup 解析 HTML 时出现 UnicodeEncodeError
- node.js - 从 Angular 向服务器发送数据时请求正文为空
- java - PaintComponent 函数一直在运行
- java - 恼人的 Google API 客户端 (Java) 问题
- java - “找不到符号”试图引用一个数组
- github - 如何查询哪些问题引用了另一个问题?
- sockets - TCP 选择功能不适用于第二个连接
- python - 在网站的 Google 缓存上使用 Scrapy
- swift - 为什么我的弹出窗口延迟(Swift)?