6

Windows7マシンにMercurialキーリングがあります。私はPythonkeyringライブラリを使用して、Mercurialキーリングからユーザー資格情報を取得しています。

次の方法で、特定のユーザー名のパスワードを取得できます。

keyring.get_password('Mercurial', 'user@@etc')

ユーザー名を取得するための同様の機能はありますか?

4

4 に答える 4

9

パスワードを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)

このソリューションについては、DustinWyattAlexChanの功績によるものです。

于 2018-02-16T16:39:46.323 に答える
7

ユーザー名は別の場所に保存されている必要があります。

キーリングには、アプリケーション名とユーザー名でキー設定されたパスワードのみが保存されます。

于 2013-03-05T22:13:06.010 に答える
7

Windowsでは、ユーザー名とパスワード(つまり「クレデンシャル」)の両方を使用して取得できました。

c = keyring.get_credential("servicename", None)

これはmacOSでは機能しないことに注意してください。keyringバックエンドにはエントリを検索する機能がありません。つまり、ユーザー名を知っている必要があります。ネイティブコードでこれができると思いますが、公式ドキュメントを参照してください

于 2019-01-08T12:25:03.457 に答える
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

ログインが成功した場合、次回はユーザー名とパスワードを再度入力する必要はありません。

于 2020-10-07T10:11:45.543 に答える