【发布时间】:2019-01-24 11:38:17
【问题描述】:
如果我想在 github 上推送代码,在颤振中添加秘密 API 密钥的正确方法是(最佳实践)。我制作了一个使用 API 的简单应用程序,但我以粗鲁的方式使用密钥只是为了测试应用程序是否正常工作。通常根据我在后端开发应用程序的经验,密钥存储在某个地方和不同的文件中,然后只需将其导入到需要API_KEY 的所需文件中,并排除.gitignore 文件中的文件。
到目前为止,我也实现了这种方法:
文件夹树
-lib
-auth
-keys.dart
-secrets.json
secrets.json
我将在此处添加KEY 并在.gitignore 中指定此文件,以便在我推送代码时将其排除在github 中。
//Add API KEY HERE
{
"api_key": "ee4444444a095fc613c5189b2"
}
keys.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;
});
}
}
我觉得这种方法太过分了。我想得到更好的方法的建议。
【问题讨论】:
-
如果不应该共享;理想情况下,它不应该在客户端上。最终,一旦您发布了您的应用程序,人们就可以对其进行反编译以获取其中的所有内容。
-
我使用的 API 要求我添加密钥,以便获得所需的有效负载。该应用程序正在使用 API,并且需要添加密钥才能访问有效负载。我可以将密钥存储在哪里,以便在需要时访问它们?
-
我喜欢这种做事方式。我在我的应用程序中做了非常相似的事情。我还将创建一个
main_dev.dart和main_prod.dart——每个文件都将针对运行该版本的应用程序。在每个文件中,我将导入相应的secrets.json并在整个应用程序中使用它。 -
您实际上是如何在代码中检索 api 密钥字符串的?
-
如果你依赖带有秘密的 gitignored 文件,只需使用
static const键创建一个 dart 文件。更容易使用