« タブに開いた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