public ServiceResponse <LoginResultModel> CheckLogin(LoginModel model) { var isMobile = model.IsMobile; string decPassword; try { //Client'dan encrypted olarak gelen Password Decrypt edilir. //Example Password: vbt123456 ==> dmJ0MTIzNDU2 decPassword = _encryptionService.DecryptFromClientData(model.Password); } catch { string message = "Şifre işleminde bir problem yaşandı lütfen teknik destek alın."; if (isMobile) { message = "Lütfen mağazadan uygulamanın yeni versiyonunu indiriniz."; } var response = new ServiceResponse <LoginResultModel>(null); response.Entity = new LoginResultModel { UserId = -2, ExceptionMessage = message }; return(response); } var user = IsValidUserAndPasswordCombination(model.UserName, decPassword); if (user != null) { //Eğer Mobil ise if (model.IsMobile && !string.IsNullOrEmpty(model.UnqDeviceId)) { var loginedCount = (decimal)_redisCacheService.Count($"{user.Id}*"); //Aynı account ile En Fazla 2 Mobile Cihazın Girilmesine İzin Verilir. if (loginedCount >= 2) { //Mobilden Login Olunmuş ise RefreshToken Her zaman Alınır (true) var controlCacheKey = _redisCacheService.GetTokenKey(user.Id, isMobile, true, model.UnqDeviceId); var controlKey = _redisCacheService.Get <string>(controlCacheKey); if (string.IsNullOrEmpty(controlKey)) { var response2 = new ServiceResponse <LoginResultModel>(null); response2.Entity = new LoginResultModel { UserId = -1, ExceptionMessage = "En fazla 2 farklı mobil cihazdan giriş yapabilirsiniz." }; return(response2); } } } //User Session'a Atılabilir. Sonradan Kullanmak için. ////3.1'de Destek Yok. HttpContext.Session.SetObject("User", user); var loginResultModel = new LoginResultModel { UserName = user.UserName, Name = user.Name, UserId = user.Id, }; //Token var(encToken, decToken) = _encryptionService.GenerateToken(user.Email); loginResultModel.Token = encToken; var createTime = DateTime.Now; var cacheKey = _redisCacheService.GetTokenKey(user.Id, isMobile, false, model.UnqDeviceId); _redisCacheService.Set(cacheKey, decToken, createTime.AddMinutes(_coreContext.TokenExpireTime));// 1 saatlik Token Açık Atılır. DateTime tokenExpireTime = createTime.AddMinutes(_coreContext.RefreshTokenExpireTime); if (isMobile) { tokenExpireTime = createTime.AddMinutes(_coreContext.MobileRefreshTokenExpireTime); //tokenExpireTime = createTime.AddDays(365); } //RefreshToken var refreshToken = _encryptionService.GenerateToken(user.Email); loginResultModel.RefreshToken = refreshToken.encToken; _redisCacheService.Set(_redisCacheService.GetTokenKey(user.Id, isMobile, true, model.UnqDeviceId), refreshToken.decToken, tokenExpireTime); loginResultModel.CreatedTokenTime = createTime.GetTotalMilliSeconds(); var response = new ServiceResponse <LoginResultModel>(null); response.Entity = loginResultModel; return(response); } else { var loginResultModel = new LoginResultModel(); var response = new ServiceResponse <LoginResultModel>(null); response.Entity = loginResultModel; return(response); } }