HttpContext.Current.User.Identity.Name всегда является строкой. Пусто

Привет, я использую пользовательский MembershipProvider.

Я хочу знать текущее имя пользователя во время сценария приложения, но когда я пытаюсь получить доступ к HttpContext.Current.User.Identity.Name, он всегда возвращает string.Empty.

<code>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);
}
</code>

Я что-то пропустил?

 Joe Chung29 июн. 2009 г., 06:29
Вы задали имя пользователя в файле cookie аутентификации с помощью FormsAuthentication.SetAuthCookie?
 Phaedrus29 июн. 2009 г., 06:33
Как вы отправляете свое печенье? В каком методе вы вызываете вышеуказанный код?
 Matt Sherman29 июн. 2009 г., 06:08
этот код кажется достаточно простым. ты уверен что пользователь аутентифицирован? что-нибудь смешное с динамическим изменением провайдера или что-то подобно
 Muhammad Akhtar29 июн. 2009 г., 07:49
Мне нужно отредактировать свой ответ, проверьте сейчас ....
 Shimmy29 июн. 2009 г., 06:12
не смешно, бизнес, пользователь аутентифицирован

Ответы на вопрос(7)

HttpContext.Current.User.Identity.Name устанавливается при вызовеRedirectFromLoginPage. Вы можете получить текущий идентификатор пользователя отHttpContext.Current.User.Identity.Name как только вы будете перенаправлены на новую страницу. Я не уверен, зачем вам нужен доступ к имени пользователя через свойство User в этом контексте, не могли бы вы просто использовать значение, содержащееся в tbUsername.Text?

если вы создаете приложение веб-форм, оно автоматически добавляет коды в узел web.config для удаления FormsAuthentication, попробуйте удалить ниже раздел

<modules>
  <remove name="FormsAuthentication"/>
</modules>
Решение Вопроса
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""

с которой вы столкнулись, заключается в том, что на данный момент вы устанавливаете только куки аутентификации, IPrincipal, который создается внутри модуля аутентификации форм, не будет возникать до тех пор, пока не будет получен новый запрос - так что в этот момент HttpContext.User находится в странной ситуации. штат. Как только произойдет перенаправление, потому что это новый запрос от браузера, cookie будет прочитан до того, как ваша страница будет достигнута, и будет создан правильный объект пользователя.

Cookies устанавливаются в браузере только после завершения запроса.

Так как RedirectFromLoginPage создает сторонние cookie-файлы для форм, вам не нужно делать это вручную

 Matt Sherman29 июн. 2009 г., 08:08
это хорошая точка. Вы проверяете имя пользователя на той же странице, которая устанавливает cookie / входит в систему? если это так, проверьте HttpContext.Current.User.Identity на Последующий страница.
 Peter Perháč05 янв. 2011 г., 15:04
очень хороший ответ. Но это не очень помогает мне с моей проблемой. Я хочу иметь возможность перенаправить пользователя на определенную страницу в зависимости от роли пользователя. Администратор непосредственно на панели администратора, обычный пользователь на странице приветствия, опытный пользователь на определенной другой странице ... Я надеялся использовать User.IsInRole () для определения ActionResult метода действия LogOn ... но он "в странное состояние ", как вы выразились: -)

FormsAuthentication.RedirectFromLoginPage() метод, автоматически устанавливает Cookie для аутентификации.

Как бы то ни было, в моем случае у меня были вложенные веб-приложения, которые я очищал<httpModules>ег @ в дочернем приложении (чтобы он не наследовал модули httpModules от своего родительского приложения) вweb.config файл. Удаление нежелательных родительских httpModules заставило все работать снова.

Лучше проверить этот тег, прежде чем усложнять:)

System.Web.HttpContext.Current.Request.LogonUserIdentity.Name вместо тогоUser.Identity.Name. У меня это сработало.

 Jowen22 янв. 2013 г., 12:31
Это что-то другое. Когда я читаю это значение на своем веб-сайте, я получаю свою учетную запись Windows (AD) ...
 Jagd30 окт. 2013 г., 18:10
Если User.Identity.Name пусто, и вы ожидаете, что это не так, но LogonUserIdentity.Name нет, то у вас может быть проблема с вашим applicationhost.config, если вы отлаживаете из Visual Studio. Смотрите мой так вопрос для получения дополнительной информации. / Stackoverflow.com вопросы / 19686933 / ...
 ppumkin06 мар. 2017 г., 11:35
Да, я согласен с Джовеном. Это не та же самая идентичность, о которой просили ... но, к сожалению, она доступна.

это может быть причиной возврата пустого пустого значения. Попробуйте изменить путь URL-адреса с .html на .aspx или без расширения. это проблема для моего случая. Вы пытаетесь. Я надеюсь, что это полезно

попробуйте что-то вроде этого ...

var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
 Shimmy29 июн. 2009 г., 10:17
Если мне нужен пользователь, а не имя пользователя, я мог бы просто использовать Membership.GetUser (); : <|

Ваш ответ на вопрос