在Xamarin iOS中存储和检索用户凭据

时间:2017-11-01 15:43:30

标签: c# ios xamarin.ios keychain

我有一个Xamarin.iOS应用程序,要求用户登录才能查看内容。我有两个文本字段,一个用于用户名,另一个用于密码。用户登录后,API已成功返回。如何保存用户凭据,以便在他们启动应用时自动登录?

我试过这个,但是,如果用户退出,我就不知道如何检索值或重新保存凭据

void StoreKeysInKeychain(string key, string value)
    {

        var s = new SecRecord(SecKind.GenericPassword)
        {
            ValueData = NSData.FromString(value),
            Generic = NSData.FromString(key)
        };
        var err = SecKeyChain.Add(s);
    }

感谢。

2 个答案:

答案 0 :(得分:1)

您可以安装此插件,并且已完成所有工作:https://github.com/sameerkapps/SecureStorage,nuget:https://www.nuget.org/packages/sameerIOTApps.Plugin.SecureStorage/

如果你使用插件,它就像:

一样简单
CrossSecureStorage.Current.SetValue("SessionToken", "1234567890");
var sessionToken = CrossSecureStorage.Current.GetValue ("SessionToken");

如果您不想使用它,那么请查看github repo,看看他们是如何为iOS做的: https://github.com/sameerkapps/SecureStorage/blob/master/SecureStorage/Plugin.SecureStorage.iOSUnified/SecureStorageImplementation.cs

public override string GetValue(string key, string defaultValue)
{
    SecStatusCode ssc;
    var found = GetRecord(key, out ssc);
    if (ssc == SecStatusCode.Success)
    {
        return found.ValueData.ToString();
    }

    return defaultValue;
}

private SecRecord GetRecord(string key, out SecStatusCode ssc)
{
    var sr = new SecRecord(SecKind.GenericPassword);
    sr.Account = key;
    return SecKeyChain.QueryAsRecord(sr, out ssc);
}

答案 1 :(得分:-2)

最好使用iOS默认NSUserDefaults.StandardUserDefaults来存储您的凭据。

检查Login ViewController中的存储值,如果它不存在则在成功登录后将用户名和密码设置为" GetStoredCredentials"否则获取已保存的凭据并使用。

http://blahblahbla.cloudfront.net/lebron.jpg

您可以保存为字符串数组或逗号分隔值。 如有任何进一步的帮助,请通知我。 您的参考:https://developer.xamarin.com/guides/ios/application_fundamentals/user-defaults/