Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
1

Не корректно работает captcha в ASP MVC 3

02.11.2015, 22:40. Просмотров 501. Ответов 8
Метки нет (Все метки)

Добрый вечер! Помогите, пожалуйста, разобраться, почему не корректно работает captcha. Выводится при регистрации, если не вводить. не верно вводить, регистрация не проходит,НО! сообщения об ошибке или успешном введении значения не выводит! а именно эти: TempData["Message"] = "Message: captcha is valid." и TempData["ErrorMessage"] = "Error: captcha is not valid.". Уверена, что допустила какую-то до боли глупую ошибку, но не могу найти!!



Как внедряла:
установила с помощью Nu GET CaptchaMVC
Контроллер:
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
//...
public class AccountController : Controller
    { // POST: /Account/Register
 
        [HttpPost]
        public ActionResult Register(RegisterModel model, string empty )
        {
 
            if (this.IsCaptchaValid("Captcha is not valid"))
            {
                TempData["Message"] = "Message: captcha is valid.";
            }
            if (ModelState.IsValid)
            {
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
 
                if (createStatus == MembershipCreateStatus.Success)
                {
                    MigrateShoppingCart(model.UserName);
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
 
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                }
 
                TempData["ErrorMessage"] = "Error: captcha is not valid.";
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }
Модель:
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
 public class RegisterModel
    {
        [Required]
        [Display(Name = "User name")]
        public string UserName { get; set; }
 
        [Required]
        [DataType(DataType.EmailAddress)]
        [Display(Name = "Email address")]
        public string Email { get; set; }
 
        [Required]
        [StringLength(100,ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }
 
        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
 
        [Required]
        [DataType(DataType.PhoneNumber)]
        public string Phone { get; set; }
 
    }
Вьюшка:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@model MvcCosmeticsStore.Models.RegisterModel
@using CaptchaMvc.HtmlHelpers
@{
    ViewBag.Title = "Register";
}
<h2>
    Create a New Account</h2>
<p>
    Use the form below to create a new account.
</p>
<p>
    Passwords are required to be a minimum of @Membership.MinRequiredPasswordLength
    characters in length.
</p>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true, "Account creation was unsuccessful. Please correct the errors and try again.")
    <div>
        <fieldset>
            <legend>Account Information</legend>
            <div class="editor-label">
                @Html.LabelFor(m => m.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Email)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Email)
                @Html.ValidationMessageFor(m => m.Email)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.ConfirmPassword)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(m => m.ConfirmPassword)
                @Html.ValidationMessageFor(m => m.ConfirmPassword)
            </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.Phone)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Phone)
                @Html.ValidationMessageFor(m => m.Phone)
            </div>
            <div class="editor-field">
                @Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
            </div>
            <p>
                <input type="submit" value="Register" />
            </p>
        </fieldset>
    </div>
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2015, 22:40
Ответы с готовыми решениями:

ASP.NET MVC 4,ASP.NET MVC 4.5 и ASP.NET MVC 5 большая ли разница между ними?
Начал во всю осваивать технологию,теперь хочу с книжкой посидеть и вдумчиво...

asp.net mvc 2 проект, работает без контроллеров и моделей. Такое возможно?
Здравствуйте. Я новичек в MVC. Есть чужой проект, в нем не было файла проекта...

Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2
Здравствуйте. Я в бекенд разработке полный ноль. В чем разница между...

связь MVC и MVVM. Трудно ли освоить mvc параллельно с изучением ASP.NET
Здравствуйте, начал изучать ASP.NET для курсовой работы. Начал читать...

ASP.net MVC против MVC обычного
Здраствуйте, читая книгу &quot;Сандерсон С - ASP.NET MVC3 Framework с примерами на...

8
IamRain
1353 / 1217 / 377
Регистрация: 02.08.2011
Сообщений: 3,542
02.11.2015, 23:46 2
Цитата Сообщение от ilunyasha Посмотреть сообщение
if (this.IsCaptchaValid("Captcha is not valid"))
Как метод работает? Покажите код. Где на вьюхе капча оторажается? А все, увидел. )

Добавлено через 45 минут
Я не вижу, чтобы где-то во вьюхе у вас использовались данные из TempData. Ведь в случае ошибки метод возвращает ту же самую вьюху.
0
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
02.11.2015, 23:51  [ТС] 3
метод взят с CaptchaMvc.dll, с public static class CaptchaHelper, я его сама не писала, просто использовала. Вот как его аргументы отображаются, при F12 -
// Summary:
// Determines whether the captcha is valid, and write error message if need.
//
// Parameters:
// controllerBase:
// The specified System.Web.Mvc.ControllerBase.
//
// errorText:
// The specified error message.
//
// parameters:
// The specified parameters, if any.
//
// Returns:
// True if the captcha is valid; otherwise, false.
public static bool IsCaptchaValid(this ControllerBase controllerBase, string errorText, params ParameterModel[] parameters);

Добавлено через 3 минуты
"Я не вижу, чтобы где-то во вьюхе у вас использовались данные из TempData. Ведь в случае ошибки метод возвращает ту же самую вьюху." - да, не используются...сейчас буду что-то пробовать. Спасибо, Вам, большое, я просто только несколько дней в этом разбираюсь, а сроки очень поджимают.... вот и даю много ошибок((
0
IamRain
1353 / 1217 / 377
Регистрация: 02.08.2011
Сообщений: 3,542
02.11.2015, 23:51 4
Вы должны использовать ваш TempData во вьюхе. Вставьте вот этот кусок кода куда-нибудь и проверьте:
HTML5
1
2
3
4
 @if(TempData["ErrorMessage"]!=null)
{
  <p>TempData["ErrorMessage"]</p>
}
0
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
02.11.2015, 23:59  [ТС] 5
нет, не работает работает вот это только: @Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
очень странно(((
дописала как Вы посоветовали:
<div class="editor-field">
@Html.Captcha("Update", "Enter security code:", 5, "Required field", true)
@if (TempData["ErrorMessage"] != null)
{
<p>
TempData["ErrorMessage"]</p>
}
</div>
0
IamRain
1353 / 1217 / 377
Регистрация: 02.08.2011
Сообщений: 3,542
03.11.2015, 00:32 6
Сейчас точно не могу сказать, в чем проблема.
Вообще именно эта капча не самая подходящая в плане типизации, потому что по-хорошему валидация должна проводиться над моделью.
Как вариант, можно просто добавлять ошибки в ModelState - так было бы более правильно. Я бы немного переписал ваш метод:
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
[HttpPost]
        public ActionResult Register(RegisterModel model, string empty )
        {
           // сначала валидируем основные данные модели
           if (!ModelState.IsValid)    
              return View(model);
            
           // если ок - проблемную капчу
           if (!IsCaptchaValid("Captcha is not valid")) 
          { 
            ModelState.AddModelError("Captcha", "Captcha is not valid")    
            return View(model);
           }           
            
                // Attempt to register the user
                MembershipCreateStatus createStatus;
                Membership.CreateUser(model.UserName, model.Password, model.Email, "question", "answer", true, null, out createStatus);
 
                if (createStatus != MembershipCreateStatus.Success)
                   {                      
                    ModelState.AddModelError("", ErrorCodeToString(createStatus));
                    return View(model);
                    }
 
                    MigrateShoppingCart(model.UserName);
                    FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */); 
                    return RedirectToAction("Index", "Home");    
                         
        }
}
Добавлено через 2 минуты
В модели добавить свойство, скажем string типа с именем "Сaptcha".
И во вьюхе добавьте в нужном месте: @Html.ValidationMessageFor(m => m.Captcha). // либо использовать формат метода, принимающий строку "Сaptcha"

Добавлено через 10 минут
Можно использовать также google-captcha, она более надежная в плане отсеивания ботов.
Либо где-то на codeplex-e поищите, одна точно была, какой-то индиец писал, только там нужно немного исходники править под себя. Позже кину ссылку, если найду.
1
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
03.11.2015, 00:42  [ТС] 7
Попробовала как описано выше, не получается(( Во первых не воспринимает !IsCaptchaValid, только this.IsCaptchaValid ghjgecrfn, а во-вторых, теперь и картинки с каптчей нет, нигде она не генерируется)))) Да мне, если честно , показалось, что google-captcha посложнее, чем эта, а мне очень хочется во всем разобраться, чтобы я могла защитить свой проект. Но, я Вам очень-чень благоарна, за помощь) спасибо!)) Буду завтра опять что-то пытаться делать, переделывать и т.д.))
0
IamRain
1353 / 1217 / 377
Регистрация: 02.08.2011
Сообщений: 3,542
03.11.2015, 00:46 8
Цитата Сообщение от ilunyasha Посмотреть сообщение
нигде она не генерируется
Значит, хелпер Html.Captcha где-то внутри использует TempData. Завтра(уже сегодня) сброшу вам наработки, которые были.
1
ilunyasha
0 / 0 / 0
Регистрация: 21.10.2015
Сообщений: 8
03.11.2015, 00:50  [ТС] 9
IamRain, Спасибо! Буду очень ждать)
0
03.11.2015, 00:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2015, 00:50

Стоит ли изучать asp.net mvc 4 из за скорого выхода asn.net mvc vNext ?
Доброго вечера! Как я узнал, Microsoft скоро планирует выпустить новый...

Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API
Доброго времени суток! Не первый день бьюсь над задачей, не могу понять в чем...

Объясните в двух словах, в чём отличие ASP.NET от ASP.NET MVC
Можно и не в двух...


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

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

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