La membresía asp.net está aprobada como falsa pero aún permite el inicio de sesión

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

  •  06-07-2019
  •  | 
  •  

Pregunta

He cambiado el proveedor de Membresía de cuenta predeterminado para establecer IsApproved en falso.

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

Pero luego vuelvo a la página de inicio de sesión y me permite iniciar sesión. ¿No debería fallar el inicio de sesión y decir que no estoy aprobado?

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();
    }
¿Fue útil?

Solución

(parece que la otra copia de esta pregunta se cerrará, así que he copiado mi respuesta aquí)

HttpRequest.IsAuthenticated devuelve verdadero si HttpContext.User.Identity no es nulo y su propiedad IsAuthenticated devuelve verdadero.

La identidad actual se establece en FormsAuthenticationModule , pero no tiene nada que ver con su MembershipProvider. De hecho, ni siquiera lo hace referencia. Todo lo que hace es verificar si la cookie de autenticación todavía está configurada y sigue siendo válida (como está, no ha expirado).

Creo que el problema es que está llamando a uno de los Métodos de autenticación como RedirectFromLoginPage , que es la configuración de la cookie de autenticación. Si necesita esperar hasta que el usuario sea aprobado, debe asegurarse de que no está configurando la cookie.

Update

No hay valores de MembershipCreateStatus que especifican que el usuario ha sido creado pero no aprobado, por lo que su código está llamando a FormsAuth.SignIn sin verificar realmente si el usuario ha sido aprobado.

FormsAuth.SignIn solo establece la cookie, eso es todo. No valida al usuario ni tiene ninguna relación con su proveedor de membresía. Si la aprobación es asíncrona (es decir, esperando a un humano), no inicie sesión automáticamente en el usuario llamando a FormsAuth.SignIn.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top