Windows7マシンにMercurialキーリングがあります。私はPythonkeyring
ライブラリを使用して、Mercurialキーリングからユーザー資格情報を取得しています。
次の方法で、特定のユーザー名のパスワードを取得できます。
keyring.get_password('Mercurial', 'user@@etc')
ユーザー名を取得するための同様の機能はありますか?
Windows7マシンに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)
このソリューションについては、DustinWyattとAlexChanの功績によるものです。
ユーザー名は別の場所に保存されている必要があります。
キーリングには、アプリケーション名とユーザー名でキー設定されたパスワードのみが保存されます。
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
ログインが成功した場合、次回はユーザー名とパスワードを再度入力する必要はありません。