آموزش Asp.net Identity
بسم الله الرحمن الرحیم
در بخش های قبلی کار با Asp.net Identity را بررسی کردیم.
خوب بدون هیچ وقفه ای به سراغ مبحث اصلی این مقاله می رویم، اگر خاطرتان باشد، گفتیم برای ذخیره اطلاعات در Asp.net Identity می توانیم از روش Cookie استفاده کنیم.
حال فکر کنید شما می خواهید اطلاعات کلاس یا همان Model کاربر خود را در Cookie ذخیره کنید. با توجه به این که Cookie فقط اجازه ذخیره کردن اشیاء Serialize را می دهد شما نمی توانید به صورت زیر عمل کنید:
User user = // function to get user
HttpCookie cookie = new HttpCookie();
cookie.Value = user;
البته در Asp.net Identity ما به این صورت cookie.Value = user اطلاعات را ذخیره نمی کنیم. اما تفاوتی نخواهد داشت.
مشکلی که اینجا مشترک است این است که کوکی نمی تواند اطلاعات یک کلاس یا Model را ذخیره کند.
راه حل:
کلاس زیر را در نظر بگیرید
public class clsAdmin
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private int _id;
public int AdminId
{
get { return _id; }
set { _id = value; }
}
}
متد Serialize
/// ---- SerializeAnObject -----------------------------
/// <summary>
/// Serializes an object to an XML string
/// </summary>
///AnObject">The Object to serialize
/// <returns>XML string</returns>
public static string SerializeAnObject(object AnObject)
{
XmlSerializer Xml_Serializer = new XmlSerializer(AnObject.GetType());
StringWriter Writer = new StringWriter();
Xml_Serializer.Serialize(Writer, AnObject);
return Writer.ToString();
}
متد Deserialize
/// ---- DeSerializeAnObject ------------------------------
/// <summary>
/// DeSerialize an object
/// </summary>
///XmlOfAnObject">The XML string
///ObjectType">The type of object
/// A deserialized object...must be cast to correct type
public static Object DeSerializeAnObject(string XmlOfAnObject, Type ObjectType)
{
StringReader StrReader = new StringReader(XmlOfAnObject);
XmlSerializer Xml_Serializer = new XmlSerializer(ObjectType);
XmlTextReader XmlReader = new XmlTextReader(StrReader);
try
{
Object AnObject = Xml_Serializer.Deserialize(XmlReader);
return AnObject;
}
finally
{
XmlReader.Close();
StrReader.Close();
}
}
حال کلاس خود را Serialize می کنیم
clsAdmin admin = new clsAdmin();
admin.Name = “UBK”;
admin.AdminId = 1;
// Serialize it
String _serAdmin = SerializeAnObject(admin);
برای امنیت می توانیم اطلاعات خود را encrypt کنیم
String _encVal = EncDec.Encrypt(_serAdmin, “YOUR PASSWORD”);
ذخیره اطلاعات در ASP.NET Identity Claims
identity.AddClaim(new Claim(ClaimsType.Country,_encVal))
این قسمت مربوط به ASP.NET web form می باشد
حال می توانیم اطلاعات خود را در Cookie ذخیره کنیم
try
{
HttpCookie myCookie = new HttpCookie(“admin_cookie”);
DateTime now = DateTime.Now;
// Set the cookie value.
myCookie.Value = _encVal;
// Set the cookie expiration date.
myCookie.Expires = now.AddDays(14);
// Add the cookie.
Response.Cookies.Add(myCookie);
}
catch (Exception _e)
{
//Failed to add Cookie
throw _e;
}
و می توانیم Cookie خود را به صورت زیر بخوانیم
try
{
HttpCookie myCookie = new HttpCookie(“admin_cookie”);
myCookie = Request.Cookies["admin_cookie"];
// Read the cookie information and display it.
if (myCookie != null)
{
string _admStr = EncDec.Decrypt(myCookie.Value, “YOUR PASSWORD”);
clsAdmin _adm = DeSerializeAnObject(_admStr, typeof(clsAdmin)) as clsAdmin;
if (null != _adm && _adm.Login.Length > 0)
{
//DO Whatever you want with the object
}
}
else
Response.Write(“not found”);
}
catch (Exception _e)
{
//Failed to read cookie?
throw _e;
}