感谢您花时间提问,我当然同意我可以在本书的那部分更清楚。诚然,我花在第 14 章上的时间比我希望的要少,但我会在下一版中尝试弥补这一点。像您这样的反馈对于了解我需要改进的地方非常有价值,所以我很感激。
无论如何,将缓冲区写入文件是在第 8 章中提到的(并且可以在这里再次提到......第 325 页,尽管它没有明确提到 IBuffer)。使用 Windows.Storage.FileIO 类是一项简单的工作,如下所示(承诺!)。
首先,澄清一下。您有两种方法可以保存输入的凭据。如果要保存纯文本凭据,请绝对使用 Credential Locker。这样做的好处是,如果在 PC 设置中启用了漫游密码(默认情况下),这些凭据可以与用户一起自动漫游。否则,您可以将不透明的 CredentialPickerResults.credential 属性直接保存到文件中。它已经加密和加扰,因此在这种情况下您不需要使用凭证储物柜。
现在用于保存/加载凭据属性,它是一个 IBuffer。为此,您使用 FileIO.writeBufferAsync 保存并使用 FileIO.readBufferAsync 重新加载。
我修改了 Credential Picker 示例,场景 3 来演示这一点。为了保存凭证属性,我在 pickAsync 的已完成处理程序的末尾添加了以下代码:
//results.credential will be null if the user cancels
if (results.credential != null) {
//Having retrieved a credential, write the opaque buffer to a file
var option = Windows.Storage.CreationCollisionOption.replaceExisting;
Windows.Storage.ApplicationData.current.localFolder.createFileAsync("credbuffer.dat", option).then(function (file) {
return Windows.Storage.FileIO.writeBufferAsync(file, results.credential);
}).done(function () {
//No results for this operation
console.log("credbuffer.dat written.");
}, function (e) {
console.log("Could not create credbuffer.dat file.");
});
}
然后,如果可能,我创建了一个新函数来加载该凭据。这在单击 Launch 按钮而不是 launchCredPicker 时调用:
//In the page ready method:
document.getElementById("button1").addEventListener("click", readPrevCredentialAndLaunch, false);
//Added
function readPrevCredentialAndLaunch() {
Windows.Storage.ApplicationData.current.localFolder.getFileAsync("credbuffer.dat").then(function (file) {
return Windows.Storage.FileIO.readBufferAsync(file);
}).done(function (buffer) {
console.log("Read from credbuffer.dat");
launchCredPicker(buffer);
}, function (e) {
console.log("Could not reopen credbuffer.dat; launching default");
launchCredPicker(null);
});
}
//Modified to take a buffer
function launchCredPicker(prevCredBuffer) {
try {
var options = new Windows.Security.Credentials.UI.CredentialPickerOptions();
//Other options omitted
if (prevCredBuffer != null) {
options.previousCredential = prevCredBuffer;
}
//...
就是这样。我将修改后的 JS 示例放在http://www.kraigbrockschmidt.com/src/CredentialPickerJS_modified.zip上。
.克雷格
作者,用 HTML、CSS 和 JavaScript 编写 Windows 8 应用程序(免费电子书)