3727
یکی از موارد که نیاز داشتم ذخیره ورود کاربر رمانی که login میکند البته گاهی در فروم ها استفاده از farmework هایی رو توصیه میکنند اما من سعی میکنم کدهای خودم رو بنویسم
برای این کار کد خودم رو نوشتم
ابتدا یک کلاس به عنوان مودل که مشخصات کاربر را ذخیره کند
public class LoginStatistic
{
public int Id { get; set; }
public string UserId { get; set; }
public string UserPass { get; set; }
public DateTime EnterDate { get; set; }
public string UserIp { get; set; }
}
و آن را در IdentityModal اضافه میکنیم
و حال کلاس ذخیره سازی
public class LoginStore
{
private string _userName, _password, _userIp;
public LoginStore()
{
}
public LoginStore(string userId, string pass, string userIp)
{
this._userName = userId;
this._password = pass;
this._userIp = userIp;
StoreData();
}
public void StoreData()
{
using (ApplicationDbContext db = new ApplicationDbContext())
{
db.LoginStatistics.Add(new LoginStatistic()
{
UserId = _userName,
EnterDate = DateTime.Now,
UserIp = _userIp,
UserPass = _password
});
db.SaveChanges();
}
}
}
و برای استفاده مبتوان نوشت
var tt = new LoginStore(model.Email,model.Password,HttpContext.Request.ServerVariables["REMOTE_ADDR"]);
و کلاس Login به این صورت خواهد بود
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
var tt = new LoginStore(model.Email,model.Password,HttpContext.Request.ServerVariables["REMOTE_ADDR"]);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}