FormsAuthentication после входа в систему - PullRequest
0 голосов
/ 29 ноября 2008

Хорошо, у меня простой сценарий:

есть две страницы: страницы входа и приветствия. я использую FormsAuthentication с моей собственной таблицей, которая имеет четыре столбца: ID, имя пользователя, пароль, полное имя

При нажатии входа в систему я устанавливаю мое имя пользователя как:

FormsAuthentication.SetAuthCookie(userName, rememberMe ?? false);

на странице приветствия, которую я не могу использовать:

Page.User.Identity.Name

для предоставления пользователю, какой пользователь в данный момент вошел в систему, НО я не использую имя пользователя, как во всех примерах на http://asp.net веб-сайте. Я хочу использовать поле FullName

Я думаю, что всегда обращаюсь к db и запрашиваю полное имя, когда страница загружается сумасшедшим и не нравится пользователям сеансов или Simple Cookie. Возможно, поставщик FormsAuth имеет настраиваемые поля для этого

Ответы [ 6 ]

1 голос
/ 17 мая 2019

Извините, я немного опоздал на вечеринку, но вот как вы можете сделать это без сохранения значения в другом месте:)

var authCookieKey = FormsAuthentication.FormsCookieName;
var responseCookies = HttpContext.Current.Response.Cookies;
var requestCookies = HttpContext.Current.Request.Cookies;

var aspxAuthCookieInResponse = responseCookies.AllKeys.Contains(authCookieKey) ? responseCookies[authCookieKey] : null;
var aspxAuthCookieInRequest = requestCookies.AllKeys.Contains(authCookieKey) ? requestCookies[authCookieKey] : null;

// Take ASPXAUTH cookie from either response or request.
var cookie = aspxAuthCookieInResponse ?? aspxAuthCookieInRequest;
var authTicket = FormsAuthentication.Decrypt(cookie.Value); // Todo: Check for nulls.

// Using the name!
var userName = authTicket.Name;
1 голос
/ 30 ноября 2008

Я бы сохранил полное имя пользователя в файле cookie сеанса после вашего обращения к FormsAuth

FormsAuth.SetAuthCookie(userName, rememberme);

// get the full name (ex "John Doe") from the datbase here during login
string fullName = "John Doe";

Response.Cookies["FullName"].Value = fullName;
Response.Cookies["FullName"].expires = DateTime.Now.AddDays(30);

, а затем получить его на страницах просмотра с помощью:

string fullName = HttpContext.Current.Request.Cookies["FullName"].Value
1 голос
/ 29 ноября 2008

Проверка подлинности с помощью форм работает с использованием файлов cookie. Вы могли бы создать свой собственный файл cookie для аутентификации и ввести в него полное имя, но я думаю, что я бы пошел с тем, чтобы поместить его в сессию. Если вы используете какой-либо файл cookie, вам нужно будет каждый раз извлекать из него имя. Привязка к сеансу кажется более естественной и упрощает доступ к ней. Я согласен, что каждый раз возвращаться к БД кажется бесполезным делом, и я бы наверняка где-то кешировал значение.

Информацию о создании ваших собственных файлов cookie для проверки подлинности форм можно найти здесь .

0 голосов
/ 23 октября 2009

Самый простой вариант - использовать сеанс. По умолчанию состояние сеанса сохраняется в памяти и будет потеряно при перезагрузке рабочего процесса ASP.NET, однако вы можете настроить его на использование службы состояний, которая сохраняет информацию о сеансе в отдельном процессе:

http://msdn.microsoft.com/en-us/library/ms178586.aspx

Другой вариант - использовать профили. Похоже, что у вас уже есть информация о профиле, хранящаяся в ваших собственных таблицах, вам, вероятно, придется написать собственного провайдера, так что это более сложное решение.

0 голосов
/ 23 октября 2009

А как насчет использования профилей для хранения дополнительной информации с пользователем?

0 голосов
/ 29 ноября 2008

Нет пользовательских полей для аутентификации форм. Вам просто нужно использовать сессию. Это то, что он там, чтобы вы знали. ;) Только не забывайте - cookie аутентификации форм и сессия - это две независимые вещи. У них даже у каждого свои таймауты. Таким образом, сеанс не будет сброшен при выходе пользователя из системы, если вы сами не сделаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...