检查PasswordVault /凭证管理器是否在加载时具有应用数据

Kas*_*sen 6 c# credentials windows-8 passwordvault

嘿我正在使用PasswordVault在我的Windows 8应用程序中存储用户凭据.

我希望应用程序在加载时执行的操作是检查PasswordVault /凭据管理器是否已为我的应用程序存储了值.如果不这样做,我希望它留在页面上,以便用户可以登录,但如果凭证已经存在,那么我希望它直接进入第2页.

我尝试使用以下代码:

private Windows.Security.Credentials.PasswordCredential GetCredentialFromLocker()
{
    Windows.Security.Credentials.PasswordCredential credential = null;

    var vault = new Windows.Security.Credentials.PasswordVault();

    var credentialList = vault.FindAllByResource("MYapp");
    if (credentialList.Count > 0)
        if (credentialList.Count == 1)
            credential = credentialList[0];
        else
            // User selecor

    return credential;
}
Run Code Online (Sandbox Code Playgroud)

然后在页面加载我有

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    var loginCredential = GetCredentialFromLocker();

    if (loginCredential != null)
        this.Frame.Navigate(typeof(page2)); 
    else
    {
        loginBigButton.Visibility = Windows.UI.Xaml.Visibility.Visible;
        signUpButton.Visibility = Windows.UI.Xaml.Visibility.Visible;
        signUpTextBlock.Visibility = Windows.UI.Xaml.Visibility.Visible;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,如果没有与资源(MYapp)存储的凭证代码:

var credentialList = vault.FindAllByResource("MYapp");
Run Code Online (Sandbox Code Playgroud)

收益率:

WinRT信息:无法在Vault中找到凭据

附加信息:找不到元素.

Tad*_*cik 4

FindAllByResource当没有指定资源的凭据时,方法会抛出异常,因此您需要用try catch块包装它。

或者,您可以使用“RetrieveAll”,如果没有存储凭据,它不会引发异常,并迭代每个返回的凭据PasswordCredential并检查其Resource属性。