В приложении ASP.net я использую элемент управления Login с пользовательским поставщиком членства, который я написал. То, что я хочу сделать, это установить Thread.CurrentPrincipal
для моего пользовательского объекта Principal, сразу после аутентификации пользователя.
Я использую сеттер: Thread.CurrentPrincipal
, и он устанавливает для меня объект Principal, но во всех последующих потоках этот CurrentPrincipal переопределяется со значением по умолчанию.
Вот мой код для события Authenticate элемента управления Login:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
string username = Login1.UserName;
string password = Login1.Password;
if (Membership.ValidateUser(username, password))
{
var login = sender as Login;
var phoenixIdentity = new PhoenixIdentity("B", "Forms" , true);
var principal = new PhoenixPrincipal(phoenixIdentity);
Thread.CurrentPrincipal = principal;
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
HttpContext.Current.User = principal;
e.Authenticated = true;
}
}
Например, представьте, что я захожу с именем пользователя A, все идет хорошо ... Проверка проходит успешно, но я жестко кодирую пользователя с именем пользователя B в объекте Identity, для которого задан объект Principal, который я установил как CurrentPrincipal
объект.
Когда я проверяю, какой пользователь установлен в CurrentPrincipal
Идентичность в конце этого метода, он говорит, что это пользователь B. Но когда я загружаю другую страницу и затем проверяю, что такое Идентификация CurrentPrincipal
, он говорит, что это пользователь A.
Итак, как я могу сделать мой объект CurrentPrincipal
постоянным во всех других потоках, и где / когда этот элемент управления Login устанавливает объект CurrentPrincipal
потока?