Мой пользователь прошел проверку подлинности, но хранит дополнительную информацию в FormsAuthenticationTicket, а затем в файле cookie.
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string userData = fullName + "|" + contactNumber1 + "|" + contactNumber2
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
userName,
DateTime.Now,
DateTime.Now.AddMinutes(20),
false,
userData,
FormsAuthentication.FormsCookiePath);
Создание файла cookie и т. Д.
Все это работает нормально.
Я использую mvc 3 и Razor
У меня есть foo.Layout.cshtml, который отображает полное имя / ContactNumber и т. Д. В верхней части страницы.
Я мог бы включить код в верхней частиfoo.Layout.cshtml для извлечения отображения этих значений:
@{
FormsAuthenticationTicket ticket = ( (FormsIdentity)User.Identity ).Ticket;
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string[] userData = ticket.UserData.Split(new char[] { '|' });
string fullName = userData[0];
string contactNumber1 = userData[1];
string contactNumber2 = userData[2];
}
<div>@fullName</div>
<div>@contactNumber1</div>
<div>@contactNumber2</div>
Это означает, что мне не нужно включать этот код в мои контроллеры, но, честно говоря, мне не нравится его и в моем реальном приложении (разные значения)Мне нужны значения в большинстве моих представлений, включая макет.
Итак, я обсудил, в том числе и код внутри моего контроллера:
Создание модели представления:
public class UserViewModel {
public string FullName { get; set; }
public string ContactNumber1 { get; set; }
public string ContactNumber2 { get; set; }
}
Создать контроллер
public class FooController : Controller {
private readonly _userViewModel = null;
public FooController( ) {
// NOTE this would actually be behind an interface in some type of
// repository / service pattern and injected but for the sake
// of easy conversation ive put it here.
FormsAuthenticationTicket ticket = ( (FormsIdentity)User.Identity ).Ticket;
// Custom UserData will contain the following | seperated values:
// [ FullName | ContactNumber1 | ContactNumber2 ]
string[] userData = ticket.UserData.Split(new char[] { '|' });
_userViewModel = new UserViewModel();
userViewModel.FullName = userData[0];
userViewModel.ContactNumber1 = userData[1];
userViewModel.ContactNumber2 = userData[2];
}
public ActionResult Index() {
(HOWEVER_SET_ON_LAYOUT_PAGE) = userViewModel.FullName;
// If not posting ViewModel
(HOWEVER_SET_ON_THIS_PAGE) = userViewModel.FullName;
// If posting ViewModel
return View(_userViewModel);
}
Может быть, кое-что из этого можно было бы поместить в фабрику контроллеров.
Я просто ищу обсуждение или идеи о том, как другие люди подходят к этой довольно распространенной установке.
Моя настоящая задача - отображать полное имя пользователя вверху каждой страницы с помощью макета и отображать полное имя (и другие данные) внизу различных форм, которые заполняются, а затем отправляются.После обратной отправки полное имя будет считано из файла cookie и отправлено на хранение в другие поля формы.Имеет ли это смысл и действительно ли это время: - /