//Метод проверяет, не заняты ты ли логин и 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); }
//Метод проверяет, не заняты ты ли логин и 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")); }