HttpContext.Current.User.Identity.Name всегда является строкой. Пусто
Привет, я использую пользовательский MembershipProvider.
Я хочу знать текущее имя пользователя во время сценария приложения, но когда я пытаюсь получить доступ к HttpContext.Current.User.Identity.Name, он всегда возвращает 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);
}
Я что-то пропустил?
7 ответов
FormsAuthentication.SetAuthCookie(tbUsername.Text, true);
bool x = User.Identity.IsAuthenticated; //true
string y = User.Identity.Name; //""
Проблема, с которой вы столкнулись, заключается в том, что на данный момент вы устанавливаете только куки аутентификации, IPrincipal, который создается внутри модуля аутентификации форм, не будет происходить до тех пор, пока не появится новый запрос - поэтому в этот момент HttpContext.User находится в странном состоянии., Как только произойдет перенаправление, потому что это новый запрос от браузера, cookie будет прочитан до того, как ваша страница будет достигнута, и будет создан правильный объект пользователя.
Файлы cookie устанавливаются в браузере только после завершения запроса.
Так как RedirectFromLoginPage в стороне создает cookie для проверки подлинности форм, вам не нужно делать это вручную
Пожалуйста, попробуй System.Web.HttpContext.Current.Request.LogonUserIdentity.Name
вместо User.Identity.Name
, Это сработало для меня.
Значение HttpContext.Current.User.Identity.Name
устанавливается вызовом RedirectFromLoginPage
, Вы можете получить текущий идентификатор пользователя от HttpContext.Current.User.Identity.Name
как только вы будете перенаправлены на новую страницу. Я не уверен, зачем вам нужен доступ к имени пользователя через свойство User в этом контексте, не могли бы вы просто использовать значение, содержащееся в tbUsername.Text?
В версии VS Community 2015, если вы создаете приложение веб-форм, оно автоматически добавляет коды в узел web.config для удаления FormsAuthentication, попробуйте удалить раздел ниже
<modules>
<remove name="FormsAuthentication"/>
</modules>
Как уже предложено FormsAuthentication.RedirectFromLoginPage()
метод, автоматически устанавливает Cookie аутентификации.
Однако в моем случае у меня были вложенные веб-приложения, где я очищал <httpModules>
тег в дочернем приложении (чтобы он не наследовал httpModules от своего родительского приложения) в web.config
файл. Удаление нежелательных родительских httpModules заставило все работать снова.
лучше проверить этот тег, прежде чем усложнять вещи:)
Если вы ищете имя пользователя от поставщика членства, попробуйте что-то вроде этого...
var user = Membership.GetUser( HttpContext.Current.User.Identity.Name );
Если вы используете перезапись URL-адреса или измените свой URL-адрес, это может быть причиной возврата пустого значения NULL. Вам следует попробовать изменить путь вашего URL-адреса с.html на.aspx или без расширения. это проблема для моего случая. Вы пытаетесь. Я надеюсь, что это полезно