예제 #1
0
        public async Task <IActionResult> SignIn(bool isRememberMeActivated, [FromBody] SignInModel loginData)
        {
            var userModel = await _accountService.SignInAsync(loginData);

            var tokenModel = new TokenModel();

            if (userModel.Errors.Any())
            {
                tokenModel.Errors = userModel.Errors;

                return(Ok(tokenModel));
            }


            double tokenLifeTime = _jwtConfig.GetValue <double>("AccessTokenLifeTime");
            string secretKey     = _jwtConfig.GetValue <string>("SecretKey");


            tokenModel.AccessToken = _jwtHelper.GenerateToken(userModel, tokenLifeTime, secretKey, true);


            tokenLifeTime = isRememberMeActivated
                ? _jwtConfig.GetValue <double>("RefreshTokenLifeTimeLong")
                : _jwtConfig.GetValue <double>("RefreshTokenLifeTime");


            tokenModel.RefreshToken = _jwtHelper.GenerateToken(userModel, tokenLifeTime, secretKey, false);

            return(Ok(tokenModel));
        }
예제 #2
0
        public async Task <JwtAuthResponse> Login(LoginRequest requestModel)
        {
            User user = await FindUser(requestModel.Email);

            if (user is null)
            {
                throw new ApplicationException(ExceptionConstants.WrongEmailOrPassword);
            }
            SignInResult result = await _signInManager.PasswordSignInAsync(user, requestModel.Password, requestModel.IsRememberMe, false);

            JwtAuthResponse response = _jwtHelper.GenerateToken(user);

            return(response);
        }
예제 #3
0
        public async Task <ResponseModel> LoginAdminAsync(UserLoginModel userLoginModel)
        {
            var user = await _userService.GetUserByEmailAsync(userLoginModel.Email);

            if (user != null)
            {
                var result = PasswordUtilities.ValidatePass(user.Password, userLoginModel.Password, user.PasswordSalt);
                if (result)
                {
                    var jwtPayload = new JwtPayload()
                    {
                        Id       = user.Id,
                        Username = user.Username,
                        Email    = user.Email,
                        FullName = user.FullName,
                        RoleIds  = user.UserInRoles != null?user.UserInRoles.Select(x => x.RoleId).ToList() : null
                    };

                    var token = _jwtHelper.GenerateToken(jwtPayload);

                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.OK,
                        Data = new
                        {
                            jwtPayload,
                            token = token
                        }
                    });
                }
                else
                {
                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.BadRequest,
                        Message = "Email or password not match!"// TODO: multi language
                    });
                }
            }
            else
            {
                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                    Message = "Account is not register!"// TODO: multi language
                });
            }
        }
예제 #4
0
        public async Task <RespondModel> LoginAsync(AuthenViewModel authenViewModel)
        {
            var user = await _userService.Authenticate(authenViewModel.UserName, authenViewModel.Password);

            if (user != null)
            {
                var jwtPayload = new JwtPayload()
                {
                    Username = user.Name,
                    UserId   = user.Id,
                    RoleIds  = user.UserInRoles != null?user.UserInRoles.Select(x => x.AppRoleId).ToList() : null
                };
                var token = _jwtHelper.GenerateToken(jwtPayload);

                return(new RespondModel()
                {
                    StatusCode = System.Net.HttpStatusCode.OK,
                    data = token
                });
            }
            else
            {
                return(new RespondModel()
                {
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                    Message = "Your Account is wrong!"
                });
            }
        }
예제 #5
0
        public async Task <ResponseModel> RegisterAsync(UserRegisterModel userRegisterModel)
        {
            var user = await _userRepository.FetchFirstAsync(x => x.Email == userRegisterModel.Email);

            if (user != null)
            {
                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.NotAcceptable,
                    Message = "This email has already existed!",
                });
            }
            else
            {
                user = AutoMapper.Mapper.Map <User>(userRegisterModel);
                userRegisterModel.Password.GeneratePassword(out string saltKey, out string hashPass);
                user.Password     = hashPass;
                user.PasswordSalt = saltKey;

                await _userRepository.InsertAsync(user);

                var userInRoles = new List <UserInRole>();
                foreach (var roleId in userRegisterModel.RoleIds)
                {
                    userInRoles.Add(new UserInRole()
                    {
                        UserId = user.Id,
                        RoleId = roleId
                    });
                }
                _userInRoleRepository.GetDbContext().UserInRoles.AddRange(userInRoles);
                await _userInRoleRepository.GetDbContext().SaveChangesAsync();

                user = await GetAll().FirstOrDefaultAsync(x => x.Id == user.Id);

                var jwtPayload = new JwtPayload()
                {
                    UserId      = user.Id,
                    Email       = user.Email,
                    Address     = user.Address,
                    Name        = user.Name,
                    PhoneNumber = user.PhoneNumber,
                    DateOfBirth = user.DateOfBirth,
                    Gender      = user.Gender,
                    RoleIds     = user.UserInRoles != null?user.UserInRoles.Select(x => x.RoleId).ToList() : null
                };

                var token = _jwtHelper.GenerateToken(jwtPayload);

                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.OK,
                    Data = token
                });
            }
        }
예제 #6
0
        public async Task <ResponseModel> LoginAsync(UserLoginModel userLoginModel)
        {
            var user = await _userService.GetByMobileAsync(userLoginModel.Mobile);

            if (user != null)
            {
                var result = PasswordUtilities.ValidatePass(user.Password, userLoginModel.Password, user.PasswordSalt);
                if (result)
                {
                    if (!user.Verified)
                    {
                        var userViewModel = new UserViewModel(user);
                        return(new ResponseModel()
                        {
                            StatusCode = System.Net.HttpStatusCode.OK,
                            Data = userViewModel
                        });
                    }
                    else
                    {
                        var jwtPayload = new JwtPayload()
                        {
                            UserId  = user.Id,
                            Mobile  = user.Mobile,
                            Name    = user.Name,
                            RoleIds = user.UserInRoles != null?user.UserInRoles.Select(x => x.RoleId).ToList() : null
                        };

                        var token = _jwtHelper.GenerateToken(jwtPayload);

                        return(new ResponseModel()
                        {
                            StatusCode = System.Net.HttpStatusCode.OK,
                            Data = token
                        });
                    }
                }
                else
                {
                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.BadRequest,
                        Message = "Số điện thoại hoặc mật khẩu không đúng. Vui lòng thử lại!"// TODO: multi language
                    });
                }
            }
            else
            {
                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                    Message = "Số điện thoại chưa được đăng kí!"// TODO: multi language
                });
            }
        }
예제 #7
0
 public ActionResult <string> Login([FromQuery] LoginViewModel loginVM)
 {
     if (_userService.LoginVerify(loginVM))
     {
         return(_jwt.GenerateToken(loginVM.Account));
     }
     else
     {
         return(BadRequest());
     }
 }
예제 #8
0
        public async Task <JwtAuthentificationResponse> Login(LoginRequest requestModel)
        {
            var user = await FindUser(requestModel.Email);

            if (user is null)
            {
                throw new ApplicationCustomException(ExceptionConstants.WrongEmailOrPassword);
            }
            var result = await _signInManager.PasswordSignInAsync(user, requestModel.Password, requestModel.IsRememberMe, false);

            if (!result.Succeeded)
            {
                throw new ApplicationCustomException(ExceptionConstants.WrongEmailOrPassword);
            }
            IEnumerable <string> userRoles = await _userManager.GetRolesAsync(user);

            JwtAuthentificationResponse response = _jwtHelper.GenerateToken(user, userRoles);

            return(response);
        }
예제 #9
0
        public async Task <IActionResult> Login([FromBody] LoginDto loginDto)
        {
            async Task <string> Login()
            {
                await _loginValidator.ValidateEntityAsync(loginDto);

                var result = await _signInManager.PasswordSignInAsync(loginDto.Email, loginDto.Password, false, false);

                if (!result.Succeeded)
                {
                    throw new FoodsValidationException("Username", loginDto.Email, "Invalid username or password");
                }

                var appUser  = _userManager.Users.SingleOrDefault(r => r.Email == loginDto.Email);
                var jwtToken = _jwtHelper.GenerateToken(appUser);

                return(jwtToken);
            }

            return(await Execute(Login));
        }
예제 #10
0
 public async Task <ActionResult> SignIn([FromBody] SignInRequest request)
 {
     if (await _repository.Account.SignIn(request.Login, request.Password))
     {
         string token = _jwtHelper.GenerateToken();
         return(Ok(new ResponseDTO {
             Success = true, Data = new { token }
         }));
     }
     return(BadRequest(new ResponseDTO {
         Success = false
     }));
 }
예제 #11
0
        public async Task <Login> GetUserInformation(Login loginDetails)
        {
            //Generate login info simulating DB;
            Login login = GenerateUser().Where(u => u.UserAccess == loginDetails.UserAccess &&
                                               u.Password == loginDetails.Password).FirstOrDefault();

            login.Password = "";

            if (login == null)
            {
                return(null);
            }
            return(await _jwtHelper.GenerateToken(login));
        }
예제 #12
0
        public void JwtGenerateToken()
        {
            var user = new MemberDto
            {
                Name             = "Jhon",
                LastName         = "Watson",
                Email            = "*****@*****.**",
                Username         = "******",
                LastLogin        = DateTime.Now,
                RegistrationDate = DateTime.Now
            };
            var token = jwt.GenerateToken(user);

            Assert.IsNotEmpty(token);
        }
예제 #13
0
        public TokenResponse GenerateAuthenticationToken(LoginRequest command)
        {
            var user = GetUserByUserNameAndPassword(command.Username, command.Password);

            var notBeforeDate  = DateTime.Now;
            var expriationDate = notBeforeDate.AddHours(5);

            var token = _jwtHelper.GenerateToken(user.Id, user.Username, notBeforeDate, expriationDate);

            return(new TokenResponse
            {
                Token = token,
                ExpirationDate = expriationDate
            });
        }
예제 #14
0
        public async Task <ResponseModel> LoginAsync(UserLoginModel userLoginModel)
        {
            var user = await _userService.GetByEmailAsync(userLoginModel.Email);

            if (user != null)
            {
                var result = PasswordUtilities.ValidatePass(user.Password, userLoginModel.Password, user.PasswordSalt);
                if (result)
                {
                    var jwtPayload = new JwtPayload()
                    {
                        UserId      = user.Id,
                        Email       = user.Email,
                        Address     = user.Address,
                        Name        = user.Name,
                        PhoneNumber = user.PhoneNumber,
                        DateOfBirth = user.DateOfBirth,
                        Gender      = user.Gender,
                        RoleIds     = user.UserInRoles != null?user.UserInRoles.Select(x => x.RoleId).ToList() : null
                    };

                    var token = _jwtHelper.GenerateToken(jwtPayload);

                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.OK,
                        Data = token
                    });
                }
                else
                {
                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.BadRequest,
                        Message = "Email or password is incorrect. Please try again!"
                    });
                }
            }
            else
            {
                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.BadRequest,
                    Message = "Email doesn't exist!"
                });
            }
        }
예제 #15
0
        public async Task <ResponseModel> VerifyCodeAsync(Guid userId, string code)
        {
            var user = await _userRepository.GetByIdAsync(userId);

            if (user == null)
            {
                return(new ResponseModel()
                {
                    StatusCode = System.Net.HttpStatusCode.NotFound,
                    Message = "User không tồn tại trong hệ thống. Vui lòng kiểm tra lại!"
                });
            }
            else
            {
                if (user.VerifyCode != code)
                {
                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.BadRequest,
                        Message = "Mã xác nhận không hợp lệ!"
                    });
                }
                else
                {
                    var jwtPayload = new JwtPayload()
                    {
                        UserId  = user.Id,
                        Mobile  = user.Mobile,
                        Name    = user.Name,
                        RoleIds = user.UserInRoles != null?user.UserInRoles.Select(x => x.RoleId).ToList() : null
                    };

                    var token = _jwtHelper.GenerateToken(jwtPayload);

                    return(new ResponseModel()
                    {
                        StatusCode = System.Net.HttpStatusCode.OK,
                        Data = token
                    });
                }
            }
        }