Как я могу получить доступ к UserId в Членстве ASP.NET, не используя Членство. GetUser ()?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
17
задан Jason Plank 1 November 2011 в 19:58
поделиться

7 ответов

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

Мой исходный вопрос был о UserId, и это не доступно от:

System.Web.HttpContext.Current.User.Identity.Name
4
ответ дан 30 November 2019 в 11:13
поделиться

Попробуйте это:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
23
ответ дан 30 November 2019 в 11:13
поделиться

Ваша причина этого для сохранения вызова базы данных каждый раз, Вам нужен UserId? Если так, когда я использую ASP.NET MembershipProvider, я обычно или делаю пользовательского поставщика, который позволяет мне кэшировать тот вызов или служебный метод, который я могу кэшировать.

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

, Если Вы задаетесь вопросом, почему они не реализовали метод GetUserId, это просто, потому что Вам не всегда гарантируют тот, что идентификатором пользователя будет GUID как во включенном поставщике.

РЕДАКТИРОВАНИЕ:

Видят статья ScottGu о поставщиках , который обеспечивает ссылка на загрузку фактического исходного кода для т.е. SqlMembershipProvider.

, Но самая простая вещь сделать действительно GetUserId () метод в Вашем пользовательском объекте, или служебный класс, где Вы получаете UserId от кэша/сессии, если там, иначе поражают базу данных, кэширует ее именем пользователя (или хранилище на сессии) и возвращает ее.

Для чего-то больше, чтобы рассмотреть (но быть очень осторожными из-за ограничений размера cookie): Автор Форм: Членство, Роли и Профиль без Поставщиков и никакой Сессии

13
ответ дан 30 November 2019 в 11:13
поделиться

У Вас есть две опции здесь:

1) имя пользователя Использования как первичный ключ для Вашей пользовательской таблицы данных т.е.:

select * from [dbo.User] where Username = 'andrew.myhre'

2) Добавляют UserID к профилю.

существуют за и против к каждому методу. Лично я предпочитаю первое, потому что это означает, что я должен не обязательно настроить поставщика профиля out-of-the-box, и я предпочитаю осуществлять уникальные имена пользователей в своих системах так или иначе.

0
ответ дан 30 November 2019 в 11:13
поделиться

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

самый близкий индекс является aspnet_Users_Index, который требует ApplicationId и LoweredUserName.

РЕДАКТИРОВАНИЕ:

ой - перечитывает сообщение Andrew, и он не делает выбора * на aspnet_Users таблице, а скорее, пользовательская таблица профиля/пользователя с помощью имени пользователя в качестве первичного ключа.

0
ответ дан 30 November 2019 в 11:13
поделиться

Вы попытались использовать System.Web.HttpContext.Current.User.Identity.Name? (Удостоверьтесь, что проверили, что User и Identity являются непустыми сначала.)

0
ответ дан 30 November 2019 в 11:13
поделиться
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

даст Вам UserID (uniqueidentifier) для текущего пользователя от aspnet_Membership таблицы - обеспечение тока успешно вошло в систему. Если Вы пробуете к < % = %> или присваивает то значение перед успешной аутентификацией, Вы получите ошибку "Ссылка на объект не набор к экземпляру объекта".

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

0
ответ дан 30 November 2019 в 11:13
поделиться
Другие вопросы по тегам:

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