В приложении ASP.net я использую элемент управления Login с пользовательским поставщиком членства, который я написал. То, что я хочу сделать, - установить Thread.CurrentPrincipal
в мой пользовательский объект Principal сразу после аутентификации пользователя.Как установить Thread.CurrentPrincipal для использования во всем приложении?
Я использую setter: Thread.CurrentPrincipal
, и он устанавливает для меня объект Principal, но на всех последующих потоках этот CurrentPrincipal переопределяется по умолчанию.
Вот мой код для события Authenticate контроля Логин:
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;
}
}
Например, представьте себе, что я войти в систему с именем пользователя А, все идет хорошо ... проверка проходит, но я жёстко пользователя с именем пользователя B в объекте Identity, который установлен на объект Principal, который я установил как объект CurrentPrincipal
.
Когда я проверяю, какой пользователь установлен в CurrentPrincipal
Идентичность в конце этого метода, он говорит, что это пользователь B. Но когда я загружаю другую страницу, а затем проверяю, что такое идентификатор , он говорит, что это пользователь А.
Итак, как я могу сделать свой объект CurrentPrincipal
постоянным для всех остальных потоков, и где/когда этот элемент управления Login устанавливает объект CurrentPrincipal
Thread?
Что вы делаете? Вы хотите, чтобы все были идентифицированы как первый зарегистрированный пользователь? Вам необходимо понять механизмы аутентификации и авторизации веб-приложений, использование файлов cookie и т. Д. Вы не можете установить одного принципала во все многопользовательские потоки приложений. –
Конечно нет. Может быть, я недостаточно выражался. – Goran