我的 Windows 7 机器上有一个 Mercurial 密钥环。我正在使用 Pythonkeyring
库从 Mercurial 密钥环获取用户凭据。
我可以通过以下方式检索给定用户名的密码:
keyring.get_password('Mercurial', 'user@@etc')
是否有类似的功能来检索用户名?
我的 Windows 7 机器上有一个 Mercurial 密钥环。我正在使用 Pythonkeyring
库从 Mercurial 密钥环获取用户凭据。
我可以通过以下方式检索给定用户名的密码:
keyring.get_password('Mercurial', 'user@@etc')
是否有类似的功能来检索用户名?
虽然keyring
仅设计用于存储密码,但您可以滥用get_password
单独存储用户名。
import keyring
# store username & password
keyring.set_password("name_of_app", "username", "user123")
keyring.set_password("name_of_app", "password", "pass123")
# retrieve username & password
username = keyring.get_password("name_of_app", "username")
password = keyring.get_password("name_of_app", "password")
或者,如果您想保持用户名与密码配对:
import keyring
service_id = "name_of_app"
username = "user123"
# store username & password
keyring.set_password(service_id, "username", username)
keyring.set_password(service_id, username, "pass123")
# retrieve username & password
username = keyring.get_password(service_id, "username")
password = keyring.get_password(service_id, username)
您应该将用户名存储在其他地方。
密钥环仅存储密码,由应用程序名称和用户名键入。
在 Windows 上,我能够使用获得用户名和密码(即“凭据”)
c = keyring.get_credential("servicename", None)
请注意,这在 macOS 上不起作用,keyring
后端没有搜索条目的功能 - 即您需要知道用户名。不过,我想本机代码可以让你这样做,请参阅官方文档
如果您还想在脚本中隐藏您的用户名,您可以使用密钥环模块的凭据。另外我建议使用 getpass 库来输入密码;这可以防止将密码打印到屏幕上。最后,一旦发现登录失败,您可能希望在代码中的某处删除凭据。否则脚本会在不提示用户的情况下重新启动。作为一个完整的例子。这是您检索用户名和密码的方法
import getpass
import keyring
import requests
service_name = "Name of the keyring"
credentials = keyring.get_credential(service_name, None)
if credentials is None:
username = input("Username: ")
password = getpass.getpass()
keyring.set_password(service_name,username, password)
else:
username = credentials.username
password = credentials.password
然后你可以做你的事,例如使用对 api 的请求来发帖。如果失败,请删除密钥环以强制再次询问凭据。
response = requests.post('url_to_api', auth=requests.auth.HTTPBasicAuth(username, password))
try:
response.raise_for_status()
except requests.exceptions.HTTPError as err:
keyring.delete_password(service_name, username)
raise
如果登录成功,下次就不用再输入用户名和密码了。