Pergunta

Eu alterei o provedor de associação de conta padrão para definir o ISaproved como 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;
    }

Mas depois volto para a página de login e isso me permite fazer login. Não deveria falhar no login e dizer que não sou aprovado?

EDITAR:

    [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();
    }
Foi útil?

Solução

(Parece que a outra cópia desta pergunta será fechada, então copiei minha resposta aqui)

Httprequest.isAuthenticated Retorna true se httpcontext.user.Identity não for nulo e sua propriedade isauthenticada retorna true.

A identidade atual é definida no FormSauthenticationModule, mas não tem nada a ver com seu associação. De fato, ele nem se refere. Tudo o que faz é verificar se o cookie de autenticação ainda está definido e ainda é válido (como está, não expirou).

Eu acho que o problema é que você está chamando um dos FormSauthentication métodos como RedirectFromLoginPage, que está configurando o cookie de autenticação. Se você precisar esperar até que o usuário seja aprovado, precisará garantir que não esteja configurando o cookie.

Atualizar

Não há valores de Associou -secreatestatus que especificam que o usuário foi criado, mas não aprovado, então seu código está ligando FormsAuth.SignIn sem realmente verificar se o usuário foi aprovado.

FormsAuth.SignIn Apenas define o biscoito, é isso. Ele não valida o usuário ou, de outra forma, tem nenhuma relação com o seu associativo. Se a aprovação for assíncrona (ou seja, esperando por um humano), não entre no usuário automaticamente chamando o formsauth.signin.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top