Domanda

Ho modificato il provider di appartenenza all'account predefinito per impostare IsApproved su 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;
    }

Ma poi torno alla pagina di accesso e mi permette di accedere. Non dovrebbe fallire il login e dire che non sono approvato ??

Modifica

    [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();
    }
È stato utile?

Soluzione

(sembra che l'altra copia di questa domanda verrà chiusa, quindi ho copiato la mia risposta qui)

HttpRequest.IsAuthenticated restituisce true se HttpContext.User.Identity non è null e la sua proprietà IsAuthenticated restituisce true.

L'identità corrente è impostata nel FormsAuthenticationModule , ma non ha nulla a che fare con il tuo MembershipProvider. In realtà, non lo fa nemmeno riferimento. Non fa altro che verificare se il cookie di autenticazione è ancora impostato ed è ancora valido (così com'è, non è scaduto).

Penso che il problema sia che stai chiamando una delle FormsAuthentication metodi come RedirectFromLoginPage , che è le impostazioni del cookie di autenticazione. Se devi attendere che l'utente venga approvato, devi assicurarti di non impostare il cookie.

Aggiorna

Non ci sono valori di MembershipCreateStatus che specifica che l'utente è stato creato ma non approvato, quindi il tuo codice chiama FormsAuth.SignIn senza verificare effettivamente se l'utente è stato approvato.

FormsAuth.SignIn imposta semplicemente il cookie, tutto qui. Non convalida l'utente né ha alcuna relazione con il tuo MembershipProvider. Se l'approvazione è asincrona (ad es. In attesa di un essere umano), non accedere automaticamente all'utente chiamando FormsAuth.SignIn.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top