Как Вы получаете UserID Пользовательского объекта в ASP.NET MVC?

Возможно, вас заинтересуют функции Атомных операций Глиба ,

g_atomic_int_compare_and_exchange()

реализует семантику CAS для различных архитектур. Сама реализация относительно проста для понимания и может использоваться автономно без особых усилий, вы можете найти ее на svn.gnome.org/viewvc/ в glib / trunk / glib / gatomic. {C, h}. Надеюсь, это поможет!

72
задан Kris 29 May 2009 в 20:11
поделиться

5 ответов

Похоже, вы не можете получить его из объект User, но вы можете получить его следующим образом:

Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
86
ответ дан 24 November 2019 в 12:32
поделиться

Во-первых, этот ответ не является строго ответом MVC, а является ответом ASP.NET. Тот факт, что ваш сайт является MVC, в данном случае не имеет отношения к решению проблемы.


Хм. Я не очень уверен, как вы обращаетесь со своими пользователями в своей системе, но похоже, что вы используете (очень злого) провайдера членства asp.net , который поставляется с .net из коробки. На это указывает тот факт, что вы сказали

  • aspnet_Users.UserID
  • UserID - это уникальный идентификатор (читай: GUID).

В системе аутентификации форм по умолчанию, которая использует значение по умолчанию FormsIdentity , у него есть только одно свойство под названием Name (как вы правильно заметили). Это означает, что у него есть только одно значение, в котором можно разместить уникальную информацию о пользователе. В вашем случае вы указываете Name / UserName / DisplayName , в свойстве Имя . Я предполагаю, что это имя является их отображаемым именем, и оно уникально. Какое бы значение вы здесь ни вводили, оно ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ .

Отсюда вы можете получить руководство пользователя.

Проверьте это.

using System.Web.Security;

....

// NOTE: This is a static method .. which makes things easier to use.
MembershipUser user = Membership.GetUser(User.Identity.Name);
if (user == null)
{
    throw new InvalidOperationException("User [" + 
        User.Identity.Name + " ] not found.");
}

// Do whatever u want with the unique identifier.
Guid guid = (Guid)user.ProviderUserKey;

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

Прочтите все о классе членства и классе MembershipUser в MSDN.

Бонус Ответ / предложение

Таким образом, я бы КЭШировал этот результат, чтобы вам не приходилось постоянно обращаться к базе данных.

... cont from above....
Guid guid = (Guid)user.ProviderUserKey;

Cache.Add(User.Identity.Name, user.UserID); // Key: Username; Value: Guid.

В противном случае вы можете создать свой собственный класс Identity (который наследуется от IIdentity ) и добавьте свои собственные свойства, например UserID . Затем, всякий раз, когда вы аутентифицируетесь (а также при каждом запросе), вы можете установить это значение. В любом случае, это серьезное решение, поэтому приступайте к кэшированию прямо сейчас.

HTH

27
ответ дан 24 November 2019 в 12:32
поделиться

Если вы используете членство в ASP.NET (которое, в свою очередь, использует объект IPrincipal):

using System.Web.Security;
{
  MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name);
  Guid guid = (Guid)user.ProviderUserKey;
}

User.Identity всегда возвращает состояние текущего пользователя, вошел он в систему или нет.

Анонимный или нет и т. Д. Итак, выполняется проверка:

if (User.Identity.IsAuthenticated)
{
  ...
}

Итак, собираем все вместе:

using System.Web.Security;
{
  if (User.Identity.IsAuthenticated)
  {
    MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name);
    Guid guid = (Guid)user.ProviderUserKey;
  }
}
11
ответ дан 24 November 2019 в 12:32
поделиться

Свойство ProviderUserKey.

System.Web.Security.MembershipUser u;
u.ProviderUserKey
1
ответ дан 24 November 2019 в 12:32
поделиться

Если вы используете свой собственный объект IPrincipal для авторизации, вам просто нужно преобразовать его, чтобы получить доступ к идентификатору.

Например:

public class MyCustomUser : IPrincipal
{
    public int UserId {get;set;}

    //...Other IPrincipal stuff
}

Вот отличный учебник по созданию собственного Аутентификация на основе форм.

http://www.codeproject.com/KB/web-security/AspNetCustomAuth.aspx

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

3
ответ дан 24 November 2019 в 12:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: