感謝您花時間提問,我當然同意我可以在本書的這一部分更加清楚。無可否認,我在第14章花費的時間比我想要的少,但我會在下一版中嘗試彌補這一點。像你這樣的反饋在知道我需要改進的地方是非常有價值的,所以我很感激它。
無論如何,寫一個緩衝區到文件是在第8章中提到過的(可能在這裏再次提到......第325頁,儘管它沒有明確提到IBuffer)。使用Windows.Storage.FileIO類是一個簡單的工作,如下所示(promise!)。
首先澄清。您有兩種方法來保存輸入的憑證。如果您想保存純文本憑據,那麼絕對使用憑證鎖定器。這樣做的好處是,如果在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.");
});
}
然後,我創建了一個新的功能來加載證書,如果可能的話。這是在啓動按鈕單擊而不是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上。
.Kraig
作者,Programming Windows 8 Apps in HTML, CSS, and JavaScript(免費的電子書)
感謝您抽出寶貴時間來回答!對我而言,理想的做法是將用戶名和密碼保存在憑證櫃中。這樣,我認爲用戶可以查看他們,如果他們忘記了他們,並且如您所說,這可能會導致漫遊。但是,我找不到任何方式將純文本憑據傳遞給'CredentialPicker',以便可以用它們預填充字段。你知道如何做到這一點? – Sam 2013-02-28 09:18:11
好的說明。要在證書選取器的調用之間持續使用憑據,請使用緩衝區(並將其漫遊,然後將其保存在漫遊文件夾中而不是本地)。要堅持其他證書,請使用憑證儲物櫃。這些不是相互排斥的 - 用於不同目的的不同方法。請注意,您可以使用alwaysDisplayDialog調用憑據選擇器爲false,我相信您可以讓它解密緩衝區並返回純文本憑證。在這種情況下,您不需要使用憑證儲物櫃。 – 2013-02-28 14:57:26
非常感謝您的幫助! – Sam 2013-02-28 20:49:55