예제 #1
0
        public async Task <IActionResult> Register(RegisterViewModel model)
        {
            if (model?.Code == null || !AuthCodes.Contains(model.Code))
            {
                ModelState.AddModelError("", "Недействительная ссылка регистрации");
                return(View(model));
            }


            if (UserRepository.GetAll().Any(u => u.Username.ToLower() == model.Login.ToLower()))
            {
                ModelState.AddModelError("", "Имя пользователя занято");
            }

            if (model.Password != model.ConfirmPassword)
            {
                ModelState.AddModelError("", "Пароли не совпадают");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }


            User user = new User //Создание пользователя
            {
                Username     = model.Login,
                FirstName    = "Имя",
                SecondName   = "Фамилия",
                ThirdName    = "Отчество",
                PasswordHash = HashingProvider.Hash(model.Password)
            };

            var role = await RoleRepository.GetAll().FirstAsync(r => r.Name == "Пользователь");

            user.Roles.Add(role);

            lock (AuthCodes) //После создания пользователя удаляем одноразовый код
            {
                AuthCodes.Remove(model.Code);
            }

            await UserRepository.Add(user);

            string token = await AuthenticationProvider.LoginAsync(model.Login, model.Password, TimeSpan.FromMinutes(30));      //Добавляем пользователя в хранилище и генерируем ему токен доступа

            HttpContext.Response.Cookies.Append("auth_token", token);

            return(RedirectToAction("Index", "Items"));
        }
예제 #2
0
        public IActionResult Register(string code)
        {
            if (code == null || !AuthCodes.Contains(code))
            {
                return(Content("Недействительная ссылка"));
            }

            var vm = new RegisterViewModel
            {
                Code = code
            };

            return(View(vm));
        }