我被要求存储使用nsILoginManager的密码和用户名。但我不明白如何应用它。有人可以帮帮我吗?
我不太了解的是我应该存储的内容 - 只是密码或服务器ip +用户名+密码? (我只需要一个这样的组合,扩展不支持多个帐户。)
var hostname = 'chrome://synoext-torrents';
var formSubmitURL = null;
var httprealm = 'Synology NAS login';
var username = 'user';
var password;
var logins = loginManager.findLogins({}, hostname, formSubmitURL, httprealm);
只是密码存储是否正确?不确定formSubmitURL
是否等于null
。
如果我需要另外存储服务器IP,那么值应该是什么?应该传递hostname(我的插件ID)吗?
这是我目前存储服务器ip,用户名,密码和其他选项的代码 -
options.xul :
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://synoext-torrents/locale/options.dtd">
<prefwindow id="SynoPrefWindow" title="&SynoPrefWindow.title;"
ondialogaccept="return onDialogClosed();"
ondialogcancel="return onDialogClosed();"
onclose="return onDialogClosed();"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript"
src="chrome://synoext-torrents/content/options.js" />
<prefpane id="SynoPrefPane">
<preferences>
<preference id="server" name="extensions.synoext-torrents.server" type="string"/>
<preference id="username" name="extensions.synoext-torrents.username" type="string"/>
<preference id="password" name="extensions.synoext-torrents.password" type="string"/>
<preference id="autologin" name="extensions.synoext-torrents.autologin" type="bool"/>
</preferences>
<groupbox id="ServerGroupBox">
<caption label="&ServerGroupBox.Server;"/>
<vbox>
<label value="&ServerGroupBox.URL;" control="server"/>
<textbox preference="server" id="server" width="300" flex="1"/>
</vbox>
</groupbox>
<groupbox id="AccountGroupBox">
<caption label="&AccountGroupBox.Account;"/>
<vbox>
<label value="&AccountGroupBox.Username;" control="user"/>
<textbox preference="username" id="username" flex="1"/>
</vbox>
<vbox>
<label value="&AccountGroupBox.Password;" control="password"/>
<textbox preference="password" id="password" type="password" flex="1"/>
</vbox>
</groupbox>
<groupbox id="MiscGroupBox">
<caption label="&MiscGroupBox.Miscellaneous;"/>
<checkbox label="&MiscGroupBox.Login;" preference="autologin"/>
</groupbox>
</prefpane>
</prefwindow>
options.js :
function onDialogClosed()
{
var synoext = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getMostRecentWindow("navigator:browser").synoext;
var prefs = synoext.srv.prefs;
var vars = synoext.vars;
var server = prefs.getCharPref(synoext.consts.PREF_SERVER);
var username = prefs.getCharPref(synoext.consts.PREF_USERNAME);
var password = prefs.getCharPref(synoext.consts.PREF_PASSWORD);
var timeout = prefs.getIntPref(synoext.consts.PREF_TIMEOUT);
var logging = prefs.getBoolPref(synoext.consts.PREF_LOGGING);
var autologin = prefs.getBoolPref(synoext.consts.PREF_AUTOLOGIN);
var changed = false;
if (server != vars.server) {
vars.server = server;
changed = true;
}
if (username != vars.username) {
vars.username = username;
changed = true;
}
if (password != vars.password) {
vars.password = password;
changed = true;
}
if (timeout != vars.timeout) {
vars.timeout = timeout;
changed = true;
}
if (logging != vars.logging) {
vars.logging = logging;
}
if (autologin != vars.autologin) {
vars.autologin = autologin;
}
if (changed && synoext.hasPreferences()) {
synoext.login();
}
}
答案 0 :(得分:1)
你的问题太不明确了,你基本上是要求为你编写代码。这不是很好。
我正在使用nsILoginManager在InfoLister中存储登录名/密码,请参阅:
答案 1 :(得分:0)
这是我用过的代码 -
<强> JS 强>:
// Get password from the Login Manager
// https://developer.mozilla.org/en/Using_nsILoginManager
synoext.getPassword = function(username)
{
var hostname = 'chrome://synoext-torrents';
var formSubmitURL = null;
var httprealm = 'Synology NAS login';
try {
var loginManager = Components.classes["@mozilla.org/login-manager;1"]
.getService(Components.interfaces.nsILoginManager);
var logins = loginManager.findLogins({}, hostname, formSubmitURL, httprealm);
for (var i = 0; i < logins.length; i++) {
if (logins[i].username == username) {
return logins[i].password;
break;
}
}
}
catch(ex) {
synoext.log("No nsILoginManager component class");
}
return '';
}
// Save password in the Login Manager
synoext.setPassword = function(username, password)
{
var hostname = 'chrome://synoext-torrents';
var formSubmitURL = null;
var httprealm = 'Synology NAS login';
try {
var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1",
Components.interfaces.nsILoginInfo,
"init");
var loginInfo = new nsLoginInfo(hostname, formSubmitURL, httprealm, username, password, "", "");
// find old login
var loginManager = Components.classes["@mozilla.org/login-manager;1"]
.getService(Components.interfaces.nsILoginManager);
var logins = loginManager.findLogins({}, hostname, formSubmitURL, httprealm);
if (logins.length > 0) {
loginManager.removeLogin(logins[0]); // delete it
}
// add new login
loginManager.addLogin(loginInfo);
}
catch(ex) {
synoext.log("Failed to set new password");
}
}
<强> XUL 强>:
<prefpane id="SynoPrefPane">
<preferences>
...
<!--
<preference id="password" name="extensions.synoext-torrents.password" type="string"/>
-->
</preferences>
<vbox>
<label value="&AccountGroupBox.Password;" control="password"/>
<textbox id="password" type="password" flex="1"/>
</vbox>