예제 #1
0
        public async Task <string> AuthenticatedApi(AppUserRequest request)
        {
            var user = await _userManager.FindByEmailAsync(request.Email);

            if (user == null)
            {
                return("-1");
            }
            //var result =await _signInManager.PasswordSignInAsync(request.Email, request.PasswordHash, request.RememberMe, true);
            var role = await _userManager.GetRolesAsync(user);

            if (user == null)
            {
                return("0");
            }
            var claims = new[]
            {
                new Claim(ClaimTypes.Email, user.Email),
                new Claim(ClaimTypes.Name, user.FirtsName),
                new Claim(ClaimTypes.Role, string.Join(';', role)),
                new Claim(ClaimTypes.Name, user.FirtsName + " " + user.LastName)
            };
            var key        = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Tokens:Key"]));
            var credential = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var token      = new JwtSecurityToken(_config["Tokens:Issuer"], _config["Tokens:Issuer"],
                                                  claims, expires: DateTime.Now.AddMinutes(30), signingCredentials: credential);

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }
        public async Task <IActionResult> Login(AppUserRequest model)
        {
            if (model.Email != userEmail)
            {
                countLockout = 0;
            }
            userEmail = model.Email;
            var user = await _userService.FindUser(model.Email);

            ViewBag.ExternaLogin = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (user == null)
            {
                ModelState.AddModelError(string.Empty, "Tài khoản  chưa đăng ký, đăng ký để tiếp tục!");
                return(View());
            }
            else
            {
                if (user.LockoutEnabled)
                {
                    var reusult = await _userService.Login(model);

                    if (reusult)
                    {
                        var login = new LoginRequest
                        {
                            Email        = model.Email,
                            PasswordHash = model.PasswordHash
                        };
                        var token = await _userApiClient.Authenticated(login);

                        HttpContext.Session.SetString("Token", token);
                        return(RedirectToAction("Index", "Home"));
                    }
                    else
                    {
                        countLockout++;
                        if (countLockout >= 5 && user.LockoutEnabled)
                        {
                            await _userService.UpdateLockout(user);

                            ModelState.AddModelError(string.Empty, "Tài khoản đã bị khóa" +
                                                     " vui lòng liên hệ Admin để được hỗ trợ");
                            return(View());
                        }
                        ModelState.AddModelError(string.Empty, "Lưu ý nhập sai 5 lần liên tiếp sẽ khóa tài khoản!");
                        ModelState.AddModelError(string.Empty, "Sai tài khoản hoặc mật khẩu vui lòng nhập lại!");
                        return(View());
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Tài khoản đã bị khóa" +
                                             " vui lòng liên hệ Admin để được hỗ trợ");
                    return(View());
                }
            }
        }
예제 #3
0
        public async Task <int> UpdateDescription(AppUserRequest request)
        {
            var user = await FindUserId(request.Id);

            if (user != null)
            {
                user.DescriptionChannel = request.DescriptionChannel;
                _context.Update(user);
                return(await _context.SaveChangesAsync());
            }
            return(-1);
        }
예제 #4
0
        public async Task <bool> Login(AppUserRequest model)
        {
            var user = await FindUser(model.Email);

            var result = await _signInManager.PasswordSignInAsync(model.Email, model.PasswordHash, model.RememberMe, lockoutOnFailure : false);

            if (result.Succeeded)
            {
                UserAuthenticated.checkUserAuthenticated(user);
                return(result.Succeeded);
            }
            return(false);
        }
        public async Task <IActionResult> UpdateDescription(AppUserRequest request)
        {
            if (request != null)
            {
                var result = await _userService.UpdateDescription(request);

                if (result > 0)
                {
                    new UserAuthenticated().UpdateImgChannel(request.Id, null, request.DescriptionChannel);
                    return(Content("Success"));
                }
            }
            return(Content("Error"));
        }
        public async Task <IActionResult> Register(AppUserRequest model, IFormFile avartarFile)
        {
            if (ModelState.IsValid)
            {
                if (_userService.Register(model, avartarFile).Result)
                {
                    var user = await _userService.FindUser(model.Email);

                    //generation token email
                    GenerationTokenEmail(user, ConfirmEmailAccount.Register.ToString());
                    return(Redirect("EmailVerification"));
                }
            }
            ModelState.AddModelError("Lỗi", "Đăng ký không thành công");
            return(View());
        }
        public async Task <IActionResult> Register(AppUserRequest model, IFormFile avartarFile)
        {
            if (ModelState.IsValid)
            {
                if (await _userService.Register(model, avartarFile))
                {
                    var user = await _userService.FindUser(model.Email);

                    //generation token email
                    GenerationTokenEmail(user, ConfirmEmailAccount.Register.ToString(), true);
                    var url = Url.RouteUrl(new { action = "EmailVerification", controller = "Home", area = "" });
                    return(Redirect(url));
                }
            }
            ModelState.AddModelError("Lỗi", "Đăng ký không thành công");
            return(View());
        }
예제 #8
0
        public async Task <bool> Register(AppUserRequest model, IFormFile avartarFile)
        {
            var user = new AppUser
            {
                UserName       = model.Email,
                Email          = model.Email,
                FirtsName      = model.FirtsName,
                LastName       = model.LastName,
                LockoutEnabled = false,
                CreateDate     = new GetDateNow().DateNow
            };
            var result = await _userManager.CreateAsync(user, model.PasswordHash);

            if (result.Succeeded)
            {
                var findUser = await _userManager.FindByEmailAsync(model.Email);

                if (avartarFile == null)
                {
                    findUser.Avartar = "avartarDefault.JPG";
                }
                else
                {
                    findUser.Avartar = findUser.Id.ToString() + "." + avartarFile.FileName.Split('.')[1];
                    using (var fileStream = new FileStream(Path.Combine("wwwroot" + "/Client/avartar", findUser.Avartar),
                                                           FileMode.Create, FileAccess.Write))
                    {
                        avartarFile.CopyTo(fileStream);
                    }
                }
                var resultUpdate = await _userManager.UpdateAsync(findUser);

                if (resultUpdate.Succeeded)
                {
                    return(true);
                }
            }
            return(false);
        }
        public async Task <IActionResult> Authenticated([FromBody] LoginRequest requestLogin)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var request = new AppUserRequest
            {
                PasswordHash = requestLogin.PasswordHash,
                Email        = requestLogin.Email
            };
            var result = await _userService.AuthenticatedApi(request);

            if (result == "-1")
            {
                return(BadRequest("Cannot find user in Database"));
            }
            if (result == "0")
            {
                return(BadRequest("Password or UserNam InCorrect"));
            }
            return(Ok(result));
        }
예제 #10
0
        public async Task <IActionResult> Login(AppUserRequest appUser, string RememberMe)
        {
            var result = await _userService.Login(appUser);

            var user = await _userService.FindUser(appUser.Email);

            if (result)
            {
                if (RememberMe != null)
                {
                    var cookieOptions = new CookieOptions();
                    cookieOptions.Expires = DateTime.Now.AddDays(1);
                    Response.Cookies.Append("userName", user.Email, cookieOptions);
                    Response.Cookies.Append("password", appUser.PasswordHash, cookieOptions);
                }
                else
                {
                    foreach (var cookie in Request.Cookies.Keys)
                    {
                        Response.Cookies.Delete(cookie);
                    }
                }

                await _signInManager.SignInAsync(user, false);

                if (await _userManager.IsInRoleAsync(user, "Admin") || await _userManager.IsInRoleAsync(user, "Manager"))
                {
                    var loginRequest = new LoginRequest
                    {
                        Email        = appUser.Email,
                        PasswordHash = appUser.PasswordHash
                    };
                    var token = await _userApiClient.Authenticated(loginRequest);

                    HttpContext.Session.SetString("Token", token);
                    return(RedirectToAction("Index", "Home"));
                }
                else
                {
                    await _signInManager.SignOutAsync();

                    ModelState.AddModelError(string.Empty, "Tài khoản không có quyền vui lòng liên hệ Admin!");
                    return(View());
                }
            }
            else
            {
                if (user == null)
                {
                    ModelState.AddModelError(string.Empty, "Tài khoản không tồn tại!");
                    return(View());
                }
                else
                {
                    countLockoutAdmin++;
                    if (countLockoutAdmin >= 5 & user.LockoutEnabled)
                    {
                        await _userService.UpdateLockout(user);

                        ModelState.AddModelError(string.Empty, "- Tài khoản đã bị khóa" +
                                                 " vui lòng liên hệ Admin để được hỗ trợ");
                        return(View());
                    }
                    ModelState.AddModelError(string.Empty, "- Sai tài khoản hoặc mật khẩu vui lòng nhập lại!");
                    ModelState.AddModelError(string.Empty, "- Lưu ý nhập sai 5 lần liên tiếp sẽ khóa tài khoản!");
                    return(View());
                }
            }
        }