示例#1
0
        public async Task <ActionResult> Login(LoginViewModel account, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                DtoApplicationUser user = new DtoApplicationUser {
                    Email = account.Username, Password = account.Password
                };
                ClaimsIdentity claim = await _userService.Authenticate(user);

                if (claim == null)
                {
                    ModelState.AddModelError("", "Неверный логин или пароль.");
                }
                else
                {
                    _authenticationManager.SignOut();
                    _authenticationManager.SignIn(new AuthenticationProperties
                    {
                        IsPersistent = account.Persistent,
                    }, claim);
                    return(RedirectToAction("Index", "Request"));
                }
            }
            return(View(account));
        }
        /// <summary>
        /// Реализует асинхронное добавление новой учётной записи пользователя.
        /// </summary>
        public async Task <OperationResult> CreateAsync(DtoApplicationUser userDto)
        {
            ApplicationUser user = await _toolset.UserManager.FindByEmailAsync(userDto.Email);

            if (user == null)
            {
                user = new ApplicationUser {
                    Email = userDto.Email, UserName = userDto.Email
                };

                var result = await _toolset.UserManager.CreateAsync(user, userDto.Password);

                if (result.Errors.Count() > 0)
                {
                    return(new OperationResult(false, result.Errors.FirstOrDefault(), ""));
                }

                await _toolset.SaveChangesAsync();

                return(new OperationResult(true, "Учетная запись пользователя успешно добавлена.", ""));
            }
            else
            {
                return(new OperationResult(false, "Пользователь с таким E-mail уже существует!", ""));
            }
        }
        /// <summary>
        /// Реализует асинхронную аутентификацию пользователя в системе.
        /// </summary>
        public async Task <ClaimsIdentity> Authenticate(DtoApplicationUser userDto)
        {
            ClaimsIdentity claim = null;

            ApplicationUser user = await _toolset.UserManager.FindAsync(userDto.Email, userDto.Password);

            if (user != null)
            {
                claim = await _toolset.UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
            }

            return(claim);
        }