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