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

How to handle user authentication for a CLI in Python using Click

我正在使用非常好的 Click 框架来构建一个 Python CLI,它充当围绕一组复杂 REST API 的 "wrapper"。我使用 "complex" example 是为了获得良好的样板代码来构建 CLI 的其余部分。

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

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

有没有办法让用户在第一个命令中输入他的凭据,以便让他的 uid/pwd 在整个会话中保持不变(例如 mysql-cli),并且,在执行完他需要的命令后,从 CLI?"logout"?

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

您可以使用 configparser (or 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