Frage

Hallo Ich verwende einen benutzerdefinierten MembershipProvider.

Ich möchte den aktuellen Benutzernamen während eines Anwendungsszenarios wissen, aber wenn ich HttpContext.Current.User.Identity.Name versuchen Zugriff es gibt immer 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);
}

Bin ich etwas fehlt?

War es hilfreich?

Lösung

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

Das Problem, das Sie haben, ist an dieser Stelle sind Sie nur die Authentifizierungscookie Einstellung, die IPrincipal, die innerhalb des Formularauthentifizierungsmodul wird nicht passieren, bis es eine neue Anforderung erstellt werden - an diesem Punkt so der HttpContext.User ist in ein seltsamer Zustand. Sobald nun mal die Umleitung dann, weil es eine neue Anforderung vom Browser ist wird das Cookie gelesen werden, bevor Sie Ihre Seite erreicht ist und das korrekte Benutzerobjekt erstellt.

Cookies werden nur auf dem Browser so einstellen, nachdem eine Anforderung abgeschlossen ist.

Als Neben RedirectFromLoginPage ein Formen Auth Cookie erstellt wie auch immer, Sie brauchen es nicht manuell tun

Andere Tipps

Bitte versuchen Sie es System.Web.HttpContext.Current.Request.LogonUserIdentity.Name statt User.Identity.Name. Er arbeitete für mich.

Der Wert von HttpContext.Current.User.Identity.Name wird durch den Aufruf auf RedirectFromLoginPage. Sie können die aktuelle Benutzer-ID von HttpContext.Current.User.Identity.Name erhalten, sobald Sie auf eine neue Seite umgeleitet werden. Ich bin mir nicht sicher, warum Sie die Benutzername durch die User-Eigenschaft in diesem Zusammenhang zugreifen müssen, können Sie nicht nur den Wert in tbUsername.Text enthalten verwenden?

in VS Gemeinschaft 2015 Version, wenn Sie eine Web-Formulare-Anwendung erstellen, wird es automatisch Codes in web.config Knoten hinzufügen FormsAuthentication entfernen, versuchen Sie weiter unten im Abschnitt entfernen

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

Wie bereits angedeutet FormsAuthentication.RedirectFromLoginPage() Methode legt das Authentifizierungscookie automatisch.

Doch in meinem Fall hatte ich Web-Anwendungen verschachtelt, wo ich <httpModules> Tag in den Kindern Anwendung gelöscht hatte (so dass es erbt nicht Httpmodules von der übergeordneten Anwendung) in der web.config Datei. Das Entfernen des unerwünschten Mutterhttpmodules machte alles wieder funktionieren.

ist es besser, diesen Tag zu überprüfen, bevor die Dinge zu verkomplizieren:)

Wenn Sie sich für den Namen des Benutzers aus den Mitgliedschaftsanbietern suchen, versuchen Sie so etwas wie diese ...

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

Wenn Sie URL-Rewrite verwenden oder Ihre URL zu ändern, kann es seine Ursache Rückkehr Leere null value.You sollte ändern Pfad der URL von .html ASPX oder keine extendtion versuchen. dies ist Thema für meine case.You try.I hoffen, dass dies nützlich

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top