Trong một ứng dụng ASP.net tôi đang sử dụng một điều khiển đăng nhập với một nhà cung cấp thành viên tùy chỉnh mà tôi đã viết. Điều tôi muốn làm là đặt Thread.CurrentPrincipal
thành đối tượng chính của tôi, ngay sau khi người dùng được xác thực.Làm thế nào để thiết lập Thread.CurrentPrincipal để sử dụng trong suốt ứng dụng?
Tôi đang sử dụng setter: Thread.CurrentPrincipal
và nó đặt đối tượng chính cho tôi nhưng, trên tất cả các chủ đề hậu quả CurrentPrincipal này được ghi đè bằng giá trị mặc định.
Đây là mã của tôi cho sự kiện Authenticate của điều khiển 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;
}
}
Ví dụ, hãy tưởng tượng rằng tôi đăng nhập với tên người dùng A, tất cả mọi thứ suôn sẻ ... Validation trôi qua, nhưng tôi hardcode người dùng với tên người dùng B trong đối tượng Identity được đặt thành đối tượng chính mà tôi đặt làm đối tượng CurrentPrincipal
.
Khi tôi kiểm tra người dùng nào được đặt thành CurrentPrincipal
Danh tính ở cuối phương pháp này, nó nói đó là người dùng B. Nhưng khi tôi tải một trang khác và sau đó kiểm tra xem Mã nhận diện của CurrentPrincipal
là gì, nó nói đó là người dùng A.
Vì vậy, làm cách nào để tôi có thể làm cho đối tượng CurrentPrincipal
của mình tồn tại lâu dài trên tất cả các chủ đề khác và khi nào điều khiển Đăng nhập này đặt đối tượng CurrentPrincipal
của Chủ đề?
Bạn đang làm gì? Bạn có muốn mọi người được xác định là người dùng đăng nhập đầu tiên không? Bạn cần phải hiểu các cơ chế xác thực và ủy quyền ứng dụng web, việc sử dụng cookie, v.v. Bạn không thể đặt một chính cho tất cả các chuỗi ứng dụng nhiều người dùng. –
Tất nhiên là không. Có lẽ tôi đã không thể hiện bản thân mình đủ rõ ràng. – Goran