ذخیره مشخصات کاربر در زمان Login

10/11/2016 MVC
3339

یکی از موارد که نیاز داشتم ذخیره ورود کاربر رمانی که 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);
            }
        }