//Метод добавляем пользователя в базу public static void RegisterUser(RegisterModel user) { //если данные валидны(логин и email не заняты) if ((RegisterValid(user) & RegisterValidError.AllErrors) == RegisterValidError.Nope) { using (DBContext db = new DBContext()) { //создаём запись о новом пользователе User newUser = new User(); newUser.Login = user.Login; newUser.Email = user.Email; newUser.Password = user.Password; //и добавляем её в базу db.Users.Add(newUser); db.SaveChanges(); return; } } //а иначе ловите исключение else { throw new RegiserFailException(RegisterValid(user).ToString()); } }
//Метод проверяет, не заняты ты ли логин и email //должен вызываться перед RegisterUser, если вернётся что-то кроме Nope //то RegisterUser кинет исключение public static RegisterValidError RegisterValid(RegisterModel user) { //создаём перечисление для регистрации возможных ошибок RegisterValidError result = new RegisterValidError(); //изначально инициируем его "ошибок нет" result = RegisterValidError.Nope; using (DBContext db = new DBContext()) { //если в базе есть запись с таким логином bool LoginBusy = db.Users.Where(u => u.Login == user.Login).Any(); if (LoginBusy) { //то добавляем к возвращаему результату флаг логин занят result = result | RegisterValidError.LoginBusy; } //если в базе есть запись с таким email bool EmailBusy = db.Users.Where(u => u.Email == user.Email).Any(); if (EmailBusy) { //то добавляем к возвращаему результату флаг email занят result = result | RegisterValidError.EmailBusy; } } return result; }
public ActionResult Register(RegisterModel model) { RegisterValidError error = AccountRepository.RegisterValid(model); //если логин занят, то добавляем ModelState соответствующее сообщение if (error.HasFlag(RegisterValidError.LoginBusy)) { ModelState.AddModelError("Login", "Пользователь с таким логином уже существует"); } //если email занят, то добавляем ModelState соответствующее сообщение if (error.HasFlag(RegisterValidError.EmailBusy)) { ModelState.AddModelError("Email", "Пользователь с таким email уже существует"); } //если никаких ошибок нет if (ModelState.IsValid) { //создаём новый аккаунт AccountRepository.RegisterUser(model); //на всякий случай проверяем, добавились ли данные if (AccountRepository.AuthorizationDataValid(model.Login, model.Password)) { //выдаём куки FormsAuthentication.SetAuthCookie(model.Login, true); //и перенаправляем на главную return RedirectToAction("Index", "Home"); } } //в любой непонятной ситуации опять показываем страницу авторизации return View("Register"); }