我的Windows 7机器上有一个Mercurial密钥环。我正在使用Python keyring
库从Mercurial密钥环获取用户凭据。
我可以使用以下命令检索给定用户名的密码:
keyring.get_password('Mercurial', 'user@@etc')
是否有类似的功能来检索用户名?
答案 0 :(得分:3)
虽然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)
归功于Dustin Wyatt&这个解决方案Alex Chan。
答案 1 :(得分:2)
您需要将用户名存储在其他位置。
密钥环仅存储密码,密码由应用程序名称和用户名组成。
答案 2 :(得分:0)
在Windows上,我可以使用来获取用户名和密码(即“凭据”)
c = keyring.get_credential("servicename", None)
请注意,这不适用于macOS,keyring
后端没有搜索条目的功能-即,您需要知道用户名。我想本机代码将允许您执行此操作,请参阅official docs
答案 3 :(得分:0)
如果您也想在脚本中隐藏用户名,则可以使用密钥环模块的凭据。另外,我建议使用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
如果登录成功,则下次无需再次输入用户名和密码。