python - 如何使用 Click 在 Python 中处理 CLI 的用户身份验证

标签 python shell command-line-interface python-click

我正在使用非常好的 Click 框架来构建一个 Python CLI,它充当一组复杂的 REST API 的“包装器”。我用过"complex" example以便拥有良好的样板代码来构建 CLI 的其余部分。

但是,由于 CLI 本身与 REST API 进行通信,因此我需要为每个命令进行一些配置。示例:用户身份验证(ID、密码等),如果与默认身份验证不同,则为 API 服务器的 URL。

我可以强制用户将这些配置作为每个命令的参数,但是在执行许多命令时这真的很烦人(用户必须为每个命令插入他的身份验证详细信息)。

有没有办法让用户在第一个命令中输入他的凭据,以便让他的 uid/pwd 在整个 session 中持续存在(例如 mysql-cli),并且在执行他需要的命令后,从 CLI 中“注销”?

最佳答案

通常完成此操作的方法是使用一个 configure 命令将这些凭据存储在一个文件中(通常位于用户的 $HOME 文件夹中,如果您使用的是 Linux) )并更改其权限,使其只能由用户读取。

您可以使用configparser (或 JSON 或 YAML 或您想要的任何内容)根据配置文件加载不同的凭据集:

# $HOME/.your-config-name
[default]
auth-mode=password
username=bsmith
password=abc123

[system1]
auth-mode=oauth
auth-token=abc-123
auth-url=http://system.1/authenticate

[system2]
auth-mode=anonymous
auth-url=http://this-is.system2/start

然后您可以使用全局参数(例如 --profile)来选择给定请求应使用哪些凭据:

$ your-cli --profile system1 command --for first-system

关于python - 如何使用 Click 在 Python 中处理 CLI 的用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29625003/

相关文章:

azure - 创建自签名证书并将其上传到 Azure 应用服务的最简单方法

java - 当java进程被杀死时,java调用的shell脚本是否也会被杀死?

php - 在 Ubuntu 中使用 CLI 终端访问 symfony 1.4 URL

php - Linux : Setting which php bin to use in CLI

python - 如何从 model.fit MXNet Python 打印处理步骤/报告

perl - 如何使用 Perl 判断文件是否在远程文件系统上?

linux - 有人可以详细解释这个简短的bash脚本做什么吗?

python - Python 中只将一个变量传递给函数

python - Flask session 属性在初始加载后丢失类型

python - 使用上一行值来计算日志