Членство в asp.net IsApproved false, но все еще разрешается вход - PullRequest
2 голосов
/ 31 июля 2009

Я изменил поставщика членства в учетной записи по умолчанию, чтобы установить для IsApproved значение false.

    public MembershipCreateStatus CreateUser(string userName, string password, string email)
    {
        MembershipCreateStatus status;
        _provider.CreateUser(userName, password, email, null, null, false, null, out status);
        return status;
    }

Но затем я возвращаюсь на страницу входа, и она позволяет мне войти. Разве он не может войти в систему и сказать, что я не одобрен ??

EDIT:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Register(string userName, string email, string password, string confirmPassword, string address, string address2, string city, string state, string homePhone, string cellPhone, string company)
    {

        ViewData["PasswordLength"] = MembershipService.MinPasswordLength;

        if (ValidateRegistration(userName, email, password, confirmPassword))
        {

            // Attempt to register the user
            MembershipCreateStatus createStatus = MembershipService.CreateUser(userName, password, email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                FormsAuth.SignIn(userName, false /* createPersistentCookie */);

                TempData["form"] = Request.Form;
                TempData["isActive"] = false;
                return RedirectToAction("Create", "Users");
            }
            else
            {
                ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus));
            }
        }

        // If we got this far, something failed, redisplay form
        return View();
    }

1 Ответ

6 голосов
/ 31 июля 2009

(похоже, что другая копия этого вопроса будет закрыта, поэтому я скопировал свой ответ здесь)

HttpRequest.IsAuthenticated возвращает значение true, если HttpContext.User.Identity не равно нулю, а его свойство IsAuthenticated возвращает значение true.

Текущий идентификатор установлен в FormsAuthenticationModule , но он не имеет ничего общего с вашим MembershipProvider. На самом деле, он даже не ссылается на это. Все, что он делает, это проверяет, установлен ли куки-файл аутентификации и все еще действителен (как есть, еще не истек).

Я думаю, что проблема в том, что вы вызываете один из FormsAuthentication методов, таких как RedirectFromLoginPage , который является установочным файлом cookie аутентификации. Если вам нужно дождаться подтверждения пользователя, убедитесь, что вы не настраиваете cookie.

Обновление

Нет значений MembershipCreateStatus , которые указывают, что пользователь был создан, но не утвержден, поэтому ваш код вызывает FormsAuth.SignIn, фактически не проверяя, был ли пользователь утвержден.

FormsAuth.SignIn просто устанавливает cookie, вот и все. Он не проверяет пользователя и не имеет никакого отношения к вашему MembershipProvider. Если утверждение асинхронное (т. Е. Ожидание человека), то не следует автоматически регистрировать пользователя, вызывая FormsAuth.SignIn.

...