asp.net членство одобрено false, но все еще позволяет войти в систему

StackOverflow https://stackoverflow.com/questions/1212503

  •  06-07-2019
  •  | 
  •  

Вопрос

я изменил поставщика членства в учетной записи по умолчанию, чтобы установить для 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;
    }

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

Редактировать:

    [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();
    }
Это было полезно?

Решение

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

HttpRequest.Аутентифицирован возвращает true, если HttpContext.User.Идентификатор не равен null, и его свойство IsAuthenticated возвращает true.

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

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

Обновить

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

FormsAuth.SignIn просто кладем печенье, вот и все.Это не подтверждает личность пользователя и иным образом не имеет никакого отношения к вашему MembershipProvider.Если утверждение происходит асинхронно (т.е.ожидание пользователя), то не выполняйте автоматическую регистрацию пользователя с помощью FormsAuth .Вход в систему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top