| « タブに開いたchromeウィンドウからタブを閉じる | ユーザ名とパスワードを入力するプロンプト » |
パスワード管理
Webサービスを利用するXULアプリでは、たいていの場合、ログインするためのユーザ名やパスワードが付きものだ。入力したユーザ名やパスワードを記憶するために、 nsIPrefService などを利用して pref.js へ保存する?それは簡単だが好ましい方法ではない。
XULにはURIに関連付けてユーザ名やパスワードを管理する仕組みがきちんと提供されているのである。パスワードを保存したり削除したりするには nsIPasswordManager を、保存されたパスワードを問い合わせるには nsIPasswordManagerInternal を利用する。
const PM = Cc["@mozilla.org/passwordmanager;1"].getService(Ci.nsIPasswordManager); const PMI = Cc["@mozilla.org/passwordmanager;1"].getService(Ci.nsIPasswordManagerInternal);
例えば、 http://www.example.com に関連付けられたパスワードを問い合わせるには、以下のようにする。
var host = { value : "" }, user = { value : "" }, pass = { value : ""};
try {
PMI.findPasswordEntry("http://www.example.com", null, null, host, user, pass);
}
catch (ex) {
// 該当するユーザ名やパスワードが見つからない
}
alert("host:" + host.value + "
user:" + user.value + "
pass:" + pass.value);
http://www.example.com のユーザ名 foo のパスワード bar を保存するには、以下のようにする。どうやら同じユーザ名で別のパスワードを保存しようとしてもうまくいかないようなので、一度 removeUser で削除した後、 addUser で追加するという方法である。
try {
PM.removeUser("http://www.example.com", "foo");
}
catch (ex) {
// ユーザ名 foo が存在しない場合、例外発生
}
try {
PM.addUser("http://www.example.com", "foo", "bar");
}
catch (ex) {
// 何らかの例外
}
なお、Firefox では保存されたユーザ名やパスワードが ツール > オプション > プライバシー > パスワード > 保存されているパスワードを表示 でパスワードマネージャを開くことができる。
リファレンス:
Interface Reference – nsIPasswordManager
Interface Reference – nsIPasswordManagerInternal