Question

Bonjour, j'utilise un MembershipProvider personnalisé.

Je souhaite connaître le nom d'utilisateur actuel lors d'un scénario d'application, mais lorsque j'essaie d'accéder à HttpContext.Current.User.Identity.Name, il retourne toujours string.Empty.

if (Membership.ValidateUser(tbUsername.Text, tbPassword.Text))
{
    FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
    bool x = User.Identity.IsAuthenticated; //true
    string y = User.Identity.Name; //""
    FormsAuthentication.RedirectFromLoginPage(tbUsername.Text, cbRememberMe.Checked);
}

Est-ce que je manque quelque chose?

Était-ce utile?

La solution

FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""

Le problème que vous rencontrez à ce stade est que vous définissez uniquement le cookie d'authentification. Le code IPrincipal créé dans le module d'authentification par formulaire ne se produira pas tant qu'une nouvelle demande n'aura pas été reçue. un état étrange. Une fois la redirection effectuée, comme il s’agit d’une nouvelle requête du navigateur, le cookie sera lu avant que votre page ne soit atteinte et que l’objet utilisateur approprié ne soit créé.

Les cookies ne sont configurés dans le navigateur qu’une fois la demande complétée.

De plus, RedirectFromLoginPage crée un cookie d'authentification par formulaire de toute façon, vous n'avez pas besoin de le faire manuellement

Autres conseils

Veuillez essayer System.Web.HttpContext.Current.Request.LogonUserIdentity.Name au lieu de User.Identity.Name. Cela a fonctionné pour moi.

La valeur de HttpContext.Current.User.Identity.Name est définie par l'appel à RedirectFromLoginPage. Vous pouvez obtenir l'ID utilisateur actuel auprès de <=> une fois que vous êtes redirigé vers une nouvelle page. Je ne sais pas pourquoi vous devez accéder au nom d'utilisateur via la propriété User dans ce contexte. Ne pouvez-vous pas simplement utiliser la valeur contenue dans tbUsername.Text?

dans la version de VS Community 2015, si vous créez une application de formulaires Web, elle ajoute automatiquement des codes dans le noeud web.config pour supprimer FormsAuthentication. Essayez de supprimer la section ci-dessous

.
<modules>
  <remove name="FormsAuthentication"/>
</modules>

Comme déjà suggéré la méthode FormsAuthentication.RedirectFromLoginPage(), définit le cookie d'authentification automatiquement.

Cependant, dans mon cas, j’avais imbriqué des applications Web dans lesquelles j’avais effacé la balise <httpModules> dans une application enfant (afin qu’elle n’hérite pas de httpModules de son application parente) dans le fichier web.config. En supprimant les httpModules parent non désirés, tout fonctionnait à nouveau.

Il est préférable de vérifier cette balise avant de compliquer les choses:)

Si vous recherchez le nom de l'utilisateur auprès du fournisseur d'adhésion, essayez quelque chose comme ça ...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );

Si vous utilisez la réécriture d'URL ou si vous modifiez votre URL, il est possible que la valeur renvoyée soit vide. Vous devez essayer de modifier le chemin d'accès de votre URL de .html à .aspx ou aucune extension. c’est un problème pour mon cas. Vous essayez.J’espère que cela sera utile

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