Question

J'ai modifié le fournisseur d'appartenance au compte par défaut afin de définir IsApproved sur 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;
    }

Mais je retourne ensuite à la page de connexion et cela me permet de me connecter. Ne devrait-il pas échouer lors de la connexion et de dire que je ne suis pas approuvé?

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();
    }
Était-ce utile?

La solution

(il semble que l'autre copie de cette question va être fermée, alors j'ai copié ma réponse ici)

HttpRequest.IsAuthenticated renvoie true si HttpContext.User.Identity n'est pas null et que sa propriété IsAuthenticated renvoie true.

L’identité actuelle est définie dans le FormsAuthenticationModule , mais cela n’a rien à voir avec votre MembershipProvider. En fait, il n'y fait même pas référence. Il ne fait que vérifier si le cookie d'authentification est toujours défini et toujours valide (tel quel, n'a pas expiré).

Je pense que le problème est que vous appelez l'un des FormsAuthentication Des méthodes telles que les RedirectFromLoginPage , qui définit le cookie d'authentification. Si vous devez attendre que l'utilisateur soit approuvé, vous devez vous assurer que vous ne définissez pas le cookie.

Mettre à jour

Il n'y a pas de valeur de MembershipCreateStatus . qui spécifient que l'utilisateur a été créé mais non approuvé, votre code appelle donc FormsAuth.SignIn sans vérifier si l'utilisateur a été approuvé.

FormsAuth.SignIn définit simplement le cookie, c'est tout. Il ne valide pas l'utilisateur et n'a aucun lien avec votre MembershipProvider. Si l'approbation est asynchrone (en attente d'un humain), ne connectez pas automatiquement l'utilisateur en appelant FormsAuth.SignIn.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top