У меня есть пользовательская система входа, которая работает нормально, но я хотел бы добавить больше полей для получения из User.Identity, если это вообще возможно.MVC4 add UserId to Identity
я в основном имеют форму входа, которая выглядит следующим образом:
if (ModelState.IsValid)
{
string Identity = model.UserName;
string password = model.Password;
try
{
var User = (from u in ctx.Users
where u.UserName == model.UserName
select u).SingleOrDefault();
bool userValid = ctx.Users.Any(user => user.EmailAddress == Identity || user.UserName == Identity) && Crypto.VerifyHashedPassword(User.Password, password);
//bool userValid = ctx.Users.Any(user => user.EmailAddress == Identity || user.UserName == Identity) && User.Password == password;
if (userValid)
{
FormsAuthentication.SetAuthCookie(User.Name, false);
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View();
}
}
catch (Exception ex)
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View();
}
}
return View(model);
Я тогда извлечения UserName, просто используя Пользователь.Идентичность.Имя
Это прекрасно работает и сохраняет имя пользователя в Authcookie. Чего я надеялся, что могу сделать, это добавить идентификатор или, если возможно, еще больше деталей в файл cookie.
Теперь я понимаю, что существует несколько способов обойти это.
Я мог бы создать хелпер, который берет имя пользователя, надеется, что он уникален (что должно быть, но по причинам масштабируемости я бы предпочел не полагаться на это), а затем использует UserName для получения соответствующих полей из базы данных.
Другой вариант - создать еще один файл cookie, но я тоже не хочу этого делать. |
Наконец, я думал, что смогу объединить все детали пользователей в одну длинную строку, разделенную разделителем, а затем разделить их, когда я получаю детали.
Дело в том, что я чувствую, что должен быть лучший способ сделать это, чем выше.
Так может ли кто-нибудь более опытный в этом, чем мне, рассказать мне, как я могу хранить больше полей в Auth Cookie? Было бы весьма полезно.
P.s. Я понимаю, что могу использовать WebSecurity, но я обнаружил это только после того, как написал свой код входа, и я не уверен, что хочу его изменить и узнать, как сделать WebSecurity.
Заранее спасибо
Я обычно хранить UserId в cookie, а не имя пользователя. Затем я запрашиваю базу данных для объекта User с помощью UserId. Когда вам нужно масштабировать, вы можете кэшировать объект в памяти, чтобы минимизировать поиск базы данных. – 3ullShark
Yeh Я думаю, что если ни один из них не знает о способе получения большего количества полей, то это то, что я буду делать. Я оставлю это до завтрашнего вечера и посмотрю, знает ли кто-нибудь еще о пути. Если нет, не стесняйтесь публиковать это как ответ, и я буду отмечать его как ответ :). Спасибо за ваш комментарий. –
Проблема, связанная с хранением слишком большого количества информации в cookie, может замедлить время отклика пользователей. Вам также придется управлять устаревшими данными, хранящимися в файле cookie. Я считаю, что лучше просто держать его простым и загружать данные по каждому запросу. Затем кешируйте, когда это становится проблемой. – 3ullShark