public async Task <ActionResult <User> > Login(LoginViewModel user) { if (!ModelState.IsValid) { return(Ok(new { error_message = "Tai khoan hoac mat khau khong hop le" })); } User fromDb = await _userServices.DoLogin(user); if (fromDb is null) { return(Ok(new { error_message = "Đăng nhập thất bại, vui lòng thử lại!" })); } if (!fromDb.IsAccess) { return(Ok(new { error_message = "Tai khoan cua ban bi khoa. Vui long lien he quan tri vien" })); } TokenPair tokenPair = new TokenPair() { Access = _accessToken.GenerateToken(fromDb), Refresh = _refreshToken.GenerateToken() }; await _userServices.createUserTokenAsync(fromDb, tokenPair.Refresh); return(Ok(new { data = tokenPair, success = true, })); }
public async Task <UserDTO> RefreshAccessToken(RefreshTokensModel refreshTokensModel) { var principal = Principal.GetPrincipalFromExpiredToken(refreshTokensModel.AccessToken, _sensitiveTokens); var email = principal.Identity.Name; var user = await _unitOfWork.UserRepository.GetByEmail(email); if (user.RefreshToken != null) { var savedRefreshToken = user.RefreshToken; if (savedRefreshToken != refreshTokensModel.RefreshToken) { throw new SecurityTokenException("Invalid refresh token"); } else { user.Token = AccessToken.GenerateToken(user, _sensitiveTokens); var currentTime = DateTime.ParseExact(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); if (currentTime > user.RefreshTokenExiparionDate) { user.RefreshToken = RefreshToken.GenerateToken(); user.RefreshTokenExiparionDate = DateTime.Now.Date.AddDays(_sensitiveTokens.RefreshTokenLifetime); } await _unitOfWork.UserRepository.Update(user); _unitOfWork.SaveChanges(); var userDTO = _mapper.Map <UserDTO>(user); return(userDTO); } } else { throw new SecurityTokenException("No refresh token id db"); } }
public async Task <UserDTO> Authenticate(LoginModel loginModel) { var user = await _unitOfWork.UserRepository.GetByEmailAndPassword(loginModel.Email, loginModel.Password); if (user == null) { return(null); } user.Token = AccessToken.GenerateToken(user, _sensitiveTokens); user.RefreshToken = RefreshToken.GenerateToken(); var expirationDate = DateTime.Now.AddDays(_sensitiveTokens.RefreshTokenLifetime).ToString("yyyy-MM-dd HH:mm:ss"); user.RefreshTokenExiparionDate = DateTime.ParseExact(expirationDate, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture); await _unitOfWork.UserRepository.Update(user); _unitOfWork.SaveChanges(); var userDTO = _mapper.Map <UserDTO>(user); return(userDTO); }