Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Ed_
0 / 0 / 0
Регистрация: 04.10.2016
Сообщений: 7
Записей в блоге: 1
1

Подтверждение Email без использования Identity

05.10.2016, 23:51. Просмотров 898. Ответов 6

как добавить подтверждение email без использования identity???
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[HttpPost]
        public ActionResult Register(Registration account)
        {
            if (ModelState.IsValid)
            {
                var user = db.Registration.FirstOrDefault(p => p.Email.Equals(account.Email));
                    if (user != null)
                    {
                        ModelState.AddModelError("Email", "Данная почта уже занята");
                }
                else
                {
              db.Registration.Add(account);
              db.SaveChanges();  
              ModelState.Clear();
              ViewBag.Message = account.Email + " " + "Вы удачно зарегистрировались";
                }
        }
            return View();
        }
 
    }
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 23:51
Ответы с готовыми решениями:

Может ли АСП отправлять email без использования компонент?
Может ли АСП отправлять email без использования компонент? Если до то не могбы...

Переход в статус оффлайн по таймингу без Logout в ASP.NET Identity
Делаю форум для своего сайта. Возник вопрос: как юзеру, оставаясь...

Хранение информации без использования БД
Подскажите в какую сторону копать, нужно сохранить без использования БД,...

Создание сайта без использования ORM
Все время, создавая сайты, пользовался ADO.NET Entitiy Framework... тут...

Админка без использования базы данных
Здравствуйте, подскажите пожалуйста Можно ли использовать и создать админку...

6
cyb0rg_01
Фрилансер
731 / 340 / 96
Регистрация: 05.05.2014
Сообщений: 2,449
06.10.2016, 11:07 2
Ed_,
1. В случае успеха должен совершатся редирект на другую страницу, а у вас всегда отображается один и тот же View.
2. Зачем вызывать ModelState.AddModelError("Email", "Данная почта уже занята"), если в конечном итоге модель не отправляется при вызове метода во View()

Должно быть так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[HttpPost]
        public ActionResult Register(Registration account)
        {
            if (ModelState.IsValid)
            {
                var user = db.Registration.FirstOrDefault(p => p.Email.Equals(account.Email));
                if (user != null)
                {
                    ModelState.AddModelError("Email", "Данная почта уже занята");
                }
                else
                {
                    db.Registration.Add(account);
                    db.SaveChanges();  
                    ModelState.Clear();
                    ViewBag.Message = account.Email + " " + "Вы удачно зарегистрировались";
                    return RedirectToAction("Index", "Home");
                }
            }
            return View(model);
        }
    }
}
Добавлено через 5 минут
Но подобное вынуждает вас переопределять атрибут [Authorize] или вручную, где требуется авторизация для доступа к методу контроллера, писать конструкции вроде:
C#
1
2
3
4
5
6
var user = db.Registration.FirstOrDefault(p => /*как быть???*/);
if (user != null)
{
    //авторизация успешна
}
//не авторизован. нужно пройти аутентификацию или страница ошибки.
0
lvlkoo
.NET C#,ASP.NET MVC
450 / 398 / 185
Регистрация: 16.10.2010
Сообщений: 1,627
Завершенные тесты: 2
06.10.2016, 20:52 3
Лучший ответ Сообщение было отмечено Ed_ как решение

Решение

Цитата Сообщение от pro_100_gram Посмотреть сообщение
2. Зачем вызывать ModelState.AddModelError("Email", "Данная почта уже занята"), если в конечном итоге модель не отправляется при вызове метода во View()
Не обязательно ведь передавать модель обратно для отображения ошибки, если по сути не отображать значени после валидации
0
cyb0rg_01
Фрилансер
731 / 340 / 96
Регистрация: 05.05.2014
Сообщений: 2,449
06.10.2016, 21:24 4
lvlkoo, Обязательно. Иначе как клиент должен узнать об ошибке?
0
lvlkoo
.NET C#,ASP.NET MVC
450 / 398 / 185
Регистрация: 16.10.2010
Сообщений: 1,627
Завершенные тесты: 2
06.10.2016, 21:52 5
pro_100_gram, тогда как такой код работает?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginViewModel model)
        {
            if (string.IsNullOrEmpty(model.Account))
            {
                ModelState.AddModelError("Account", "Имя аккаунта не может быть пустым");
            }
 
            if (string.IsNullOrEmpty(model.Password))
            {
                ModelState.AddModelError("Password", "пароль не может быть пустым");
            }
 
 
            if (!this.IsCaptchaValid("Символы введены неверно"))
                return View();
 
            if (!ModelState.IsValid)
                return View();
 
            using (var db = new ApplicationDbContext())
            {
                var loginserver = db.LoginServers.FirstOrDefault();
 
                if (loginserver != null)
                {
                    if (AccountManager.IsValidCredentials(model.Account, model.Password, loginserver))
                    {
                        SessionPersister.Authorize(model.Account);
                        return RedirectToAction("Index", "Dashboard");
                    }                    
                }
 
                ModelState.AddModelError("Password", "Попытка входа неудачна, возможно вы ввели логин или пароль неверно?");
            }
 
           return View();
        }
Клиент отлично узнает об ошибках. Врядли ModelState'овские ошибки передаются именно через модель, и собственно как и зачем это делать через модель?? Думаю используюеться ViewData (что именно точно не скажу, так как не читал оф доки по механизму)
0
cyb0rg_01
Фрилансер
731 / 340 / 96
Регистрация: 05.05.2014
Сообщений: 2,449
06.10.2016, 22:41 6
lvlkoo, А у меня на таком не проходит:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginViewModel model, string returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return PartialView("LoginPartial", model);
            }
 
            var result = SignInManager.PasswordSignIn(model.Login, model.Password, model.RememberMe, shouldLockout: false);
            switch (result)
            {
                case SignInStatus.Success:
                    var user = UserManager.FindByName(model.Login);
                    if (UserManager.GetRoles(user.Id).Contains("AuthUser") == true)
                    {
                        return Json(new { redirectTo = Url.Action("Index", "Home") });
                    }
                    else if (UserManager.GetRoles(user.Id).Contains("Admin") == true)
                    {
                        return Json(new { redirectTo = Url.Action("Index", "Admin") });
                    }
                    return PartialView("LoginPartial", model);
                case SignInStatus.LockedOut:
                    return View("Lockout");
                case SignInStatus.RequiresVerification:
                    return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
                case SignInStatus.Failure:
                default:
                    ModelState.AddModelError("Password", "Неверно указан логин или пароль");
                    return PartialView("LoginPartial", model);
            }
        }
Цитата Сообщение от lvlkoo Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
if (string.IsNullOrEmpty(model.Account))
 {
 ModelState.AddModelError("Account", "Имя аккаунта не может быть пустым");
}
if (string.IsNullOrEmpty(model.Password))
{
ModelState.AddModelError("Password", "пароль не может быть пустым");
}
Эти проверки лучше делать в модели вот так, с помощью атрибута Required:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public class LoginViewModel
    {
        [Required]
        [Display(Name = "Логин")]
        public string Login { get; set; }
 
        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Пароль")]
        public string Password { get; set; }
 
        [Display(Name = "Запомнить меня")]
        public bool RememberMe { get; set; }
    }
0
lvlkoo
.NET C#,ASP.NET MVC
450 / 398 / 185
Регистрация: 16.10.2010
Сообщений: 1,627
Завершенные тесты: 2
06.10.2016, 22:47 7
pro_100_gram, мне сложно оперировать какими либо документированными фактами потому что я их не знаю. Отличие вижу только в одном, использование PartialView, но не думаю что при использовании таковых метод передачи сообщений об ошибке должен меняться. Видимо придйется ждать экспертов.

Я в курсе про эти замечательные атрибуты, приложенный выше код - это код прототипа
0
06.10.2016, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2016, 22:47

Аплоад файлов на сервер без использования компонент
Люди! Хочу сделать аплоад файлов на сервер без использования компонент, к...

Отслеживание сессии юзера без использования объекта Session
Подскажите как реализовать идентификацию сессии юзера на сервере, без...

Нужно закрыть сессию и Application без использования global.asa
Нужно закрыть сессию и Application без использования global.asa, когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru