2014-03-02 3 views
1

У меня есть пользовательская система входа, которая работает нормально, но я хотел бы добавить больше полей для получения из 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.

Заранее спасибо

+0

Я обычно хранить UserId в cookie, а не имя пользователя. Затем я запрашиваю базу данных для объекта User с помощью UserId. Когда вам нужно масштабировать, вы можете кэшировать объект в памяти, чтобы минимизировать поиск базы данных. – 3ullShark

+0

Yeh Я думаю, что если ни один из них не знает о способе получения большего количества полей, то это то, что я буду делать. Я оставлю это до завтрашнего вечера и посмотрю, знает ли кто-нибудь еще о пути. Если нет, не стесняйтесь публиковать это как ответ, и я буду отмечать его как ответ :). Спасибо за ваш комментарий. –

+0

Проблема, связанная с хранением слишком большого количества информации в cookie, может замедлить время отклика пользователей. Вам также придется управлять устаревшими данными, хранящимися в файле cookie. Я считаю, что лучше просто держать его простым и загружать данные по каждому запросу. Затем кешируйте, когда это становится проблемой. – 3ullShark

ответ

0

Я считаю, что это то, что вы ищете: http://msdn.microsoft.com/en-us/library/ms172766(v=vs.90).aspx

Edit: Другой поток обсуждения дополнительных полей идентификатора пользователя: ASP.NET MVC - Set custom IIdentity or IPrincipal

+0

Извините, я не уверен, как это относится к моему вопросу. Я написал пользовательскую аутентификацию и просто хочу узнать, как добавить поля в Identity. Мой VB не хорош, но, похоже, это не так? –

+0

Это звучало так, как будто вы хотели добавить дополнительную информацию к идентификатору пользователя, и эта ссылка показывает вам (между прочим), как создать пользовательскую реализацию IPrincipal для достижения этой цели. – maf748

Смежные вопросы