在 Xamarin 中存储和检索用户凭据 iOS
Storing and Retrieving User Credentials in Xamarin iOS
我有一个 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);
}
谢谢。
您可以安装此插件,所有工作都已为您完成: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 存储库,看看他们是如何为 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);
}
最好使用 iOS 默认值 NSUserDefaults.StandardUserDefaults 来存储您的凭据。
检查登录 ViewController 中的存储值,如果不存在则在成功登录后将用户名和密码设置为 "GetStoredCredentials" 否则获取保存的凭据并使用。
public String GetStoredCredentials
{
get {
string value = NSUserDefaults.StandardUserDefaults.StringForKey("Key");
if (value == null)
return "";
else
return value;
}
set {
NSUserDefaults.StandardUserDefaults.SetString(value.ToString (), "Key");
NSUserDefaults.StandardUserDefaults.Synchronize ();
}
}
您可以保存为字符串数组或逗号分隔值。
让我知道任何进一步的帮助。
供您参考:https://developer.xamarin.com/guides/ios/application_fundamentals/user-defaults/
我有一个 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);
}
谢谢。
您可以安装此插件,所有工作都已为您完成: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 存储库,看看他们是如何为 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);
}
最好使用 iOS 默认值 NSUserDefaults.StandardUserDefaults 来存储您的凭据。
检查登录 ViewController 中的存储值,如果不存在则在成功登录后将用户名和密码设置为 "GetStoredCredentials" 否则获取保存的凭据并使用。
public String GetStoredCredentials
{
get {
string value = NSUserDefaults.StandardUserDefaults.StringForKey("Key");
if (value == null)
return "";
else
return value;
}
set {
NSUserDefaults.StandardUserDefaults.SetString(value.ToString (), "Key");
NSUserDefaults.StandardUserDefaults.Synchronize ();
}
}
您可以保存为字符串数组或逗号分隔值。 让我知道任何进一步的帮助。 供您参考:https://developer.xamarin.com/guides/ios/application_fundamentals/user-defaults/