Exemplo n.º 1
0
        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,
            }));
        }
Exemplo n.º 2
0
        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");
            }
        }
Exemplo n.º 3
0
        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);
        }