HttpContext.Current.User.Identity.Name zawsze jest sznurkiem.Pusty

Witam używam niestandardowego MembershipProvider.

Chcę znać bieżącą nazwę Użytkownika podczas Scenariusza aplikacji, ale kiedy próbuję uzyskać dostęp HttpContext.Current.User.Identity.Name zawsze zwraca string.Pusty.

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);
}
Czy coś przeoczyłem?
Author: Shimmy, 2009-06-29

7 answers

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

Problem polega na tym, że w tym momencie ustawiasz tylko plik cookie uwierzytelniania, IPrincipal, który zostanie utworzony w module uwierzytelniania formularzy, nie nastąpi, dopóki nie pojawi się nowe żądanie - więc w tym momencie HttpContext.Użytkownik jest w dziwnym stanie. Gdy nastąpi przekierowanie, ponieważ jest to nowe żądanie z przeglądarki, plik cookie zostanie odczytany przed osiągnięciem Twojej strony i utworzeniem odpowiedniego obiektu użytkownika.

Pliki cookie są ustawiane w przeglądarce dopiero po wniosek został wypełniony.

Ponieważ strona przekierowująca tworzy plik cookie forms auth, nie musisz tego robić ręcznie

 34
Author: blowdart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-29 06:00:18

Proszę spróbować System.Web.HttpContext.Current.Request.LogonUserIdentity.Name zamiast User.Identity.Name. U mnie zadziałało.

 21
Author: sathya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-24 16:51:51

Wartość {[0] } jest ustawiana przez wywołanie na RedirectFromLoginPage. Po przekierowaniu na nową stronę możesz pobrać bieżący identyfikator użytkownika z HttpContext.Current.User.Identity.Name. Nie jestem pewien, dlaczego w tym kontekście musisz uzyskać dostęp do nazwy użytkownika poprzez właściwość User, nie możesz po prostu użyć wartości zawartej w tbUsername.SMS?

 8
Author: Phaedrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-29 05:41:06

W wersji vs Community 2015, jeśli utworzysz aplikację web forms, automatycznie dodasz kody w sieci.węzeł config aby usunąć FormsAuthentication, spróbuj usunąć poniższą sekcję

<modules>
  <remove name="FormsAuthentication"/>
</modules>
 2
Author: Bo Hu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-31 00:02:01

Jak już sugerowano metoda FormsAuthentication.RedirectFromLoginPage(), ustawia plik cookie uwierzytelniania automatycznie.

Jednak w moim przypadku miałem zagnieżdżone aplikacje internetowe, w których wyczyściłem znacznik <httpModules> w aplikacji potomnej (aby nie dziedziczył on httpModules z aplikacji nadrzędnej) w pliku web.config. Usunięcie niechcianych macierzystych modułów httpModules sprawiło, że wszystko działało ponownie.

Lepiej sprawdzić ten tag przed komplikacją:)

 1
Author: Bravo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 10:03:37

Jeśli szukasz nazwy użytkownika od dostawcy członkostwa, spróbuj czegoś takiego ...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
 0
Author: JP Alioto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 16:06:45

Jeśli używasz przepisywania lub zmiany adresu URL, może to być przyczyną zwrócenia pustej wartości null.Powinieneś spróbować zmienić ścieżkę adresu URL z .html do .rozszerzenie aspx lub none. to jest problem dla mojej sprawy.Spróbuj.Mam nadzieję, że to przydatne

 0
Author: Hoang Quan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:55:18