người dùng xác thực
Giả sử bạn đã đi qua bài viết trước đây của tôi đề cập ở trên, bạn có một trang đăng nhập. Bây giờ khi người dùng nhấp vào nút Đăng nhập, phương thức Authenticate
sẽ kích hoạt, hãy xem mã cho phương thức đó.
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
string userName = Login1.UserName;
string password = Login1.Password;
bool rememberUserName = Login1.RememberMeSet;
// for this demo purpose, I am storing user details into xml file
string dataPath = Server.MapPath("~/App_Data/UserInformation.xml");
DataSet dSet = new DataSet();
dSet.ReadXml(dataPath);
DataRow[] rows = dSet.Tables[0].Select(" UserName = '" + userName + "' AND Password = '" + password + "'");
// record validated
if (rows.Length > 0)
{
// get the role now
string roles = rows[0]["Roles"].ToString();
// Create forms authentication ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // Ticket version
userName, // Username to be associated with this ticket
DateTime.Now, // Date/time ticket was issued
DateTime.Now.AddMinutes(50), // Date and time the cookie will expire
rememberUserName, // if user has chcked rememebr me then create persistent cookie
roles, // store the user data, in this case roles of the user
FormsAuthentication.FormsCookiePath); // Cookie path specified in the web.config file in <Forms> tag if any.
// To give more security it is suggested to hash it
string hashCookies = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies); // Hashed ticket
// Add the cookie to the response, user browser
Response.Cookies.Add(cookie); // Get the requested page from the url
string returnUrl = Request.QueryString["ReturnUrl"];
// check if it exists, if not then redirect to default page
if (returnUrl == null) returnUrl = "~/Default.aspx";
Response.Redirect(returnUrl);
}
else // wrong username and password
{
// do nothing, Login control will automatically show the failure message
// if you are not using Login control, show the failure message explicitely
}
}
bạn có thể kiểm tra bằng cách đặt tên vai trò lõi cứng hoặc bằng cách tìm nạp cuộn người dùng từ cơ sở dữ liệu. tôi đã sửa đổi điều này cho khung thực thể của tôi.
TestEntities entities = new TestEntities();
var user = (from s in entities.UserTables
where s.UserName == loginControl.UserName
&& s.Password == loginControl.Password
select s).SingleOrDefault();
và đặt vai trò người dùng như:
user.Role
Cùng này bạn phải thực hiện một số thay đổi trong Global.asax nộp Đến nay chúng tôi đã thiết lập các vé Forms Authentication với chi tiết cần thiết ngay cả những người sử dụng vai trò trong cookie, bây giờ làm thế nào để lấy lại thông tin đó trên mọi yêu cầu và thấy rằng một yêu cầu đến từ loại vai trò nào? Để làm điều đó, chúng ta cần sử dụng sự kiện Application_AuthenticateRequest của tệp Global.asx. Xem mã bên dưới.
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
// look if any security information exists for this request
if (HttpContext.Current.User != null)
{
// see if this user is authenticated, any authenticated cookie (ticket) exists for this user
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
// see if the authentication is done using FormsAuthentication
if (HttpContext.Current.User.Identity is FormsIdentity)
{
// Get the roles stored for this request from the ticket
// get the identity of the user
FormsIdentity identity = (FormsIdentity)HttpContext.Current.User.Identity;
// get the forms authetication ticket of the user
FormsAuthenticationTicket ticket = identity.Ticket;
// get the roles stored as UserData into the ticket
string[] roles = ticket.UserData.Split(',');
// create generic principal and assign it to the current request
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(identity, roles);
}
}
}
}
Trong này thậm chí, sau khi kiểm tra nếu người dùng tồn tại, anh/cô ấy được xác thực và loại identy về thành viên thứ là FormsIdentity, tôi nhận được Identity hiện tại của người dùng và nhận được vé tôi đã đặt ở thời gian Authentiacting. Khi tôi đã có vé xác thực, tôi vừa nhận được UserData từ ticket và chia nó thành các vai trò (hãy nhớ, chúng tôi đã lưu trữ các vai trò như các giá trị được phân tách bằng dấu phẩy). Bây giờ, chúng tôi có vai trò người dùng hiện tại để chúng tôi có thể chuyển vai trò của người dùng hiện tại vào đối tượng GenericPrincipal cùng với danh tính hiện tại và chỉ định vai trò này cho đối tượng người dùng curent. Điều này sẽ cho phép chúng tôi sử dụng phương pháp IsInRole để kiểm tra xem một người dùng cụ thể thuộc về một vai trò cụ thể hay không.
Cách kiểm tra xem người dùng có vai trò cụ thể không?
Để kiểm tra xem người dùng có thuộc một vai trò cụ thể hay không, hãy sử dụng mã bên dưới. Mã này sẽ trả về true nếu bản ghi hiện tại đến từ người dùng được xác thực và có vai trò là quản trị viên.
HttpContext.Current.User.IsInRole("admin")
Cách kiểm tra xem người dùng có được xác thực không?
Để kiểm tra xem người dùng có được xác thực hay không, hãy sử dụng mã bên dưới.
HttpContext.Current.User.Identity.IsAuthenticated
Để có được tên người dùng của người đủ thẩm quyền
HttpContext.Current.User.Identity.Name
Ghi vào điều .. mã này đòi hỏi một số cài đặt webconfig trong thẻ hình thức như:
Add sau thiết lập vào web của bạn Authentication. tệp cấu hình bên dưới.
<authentication mode="Forms">
<forms defaultUrl="default.aspx" loginUrl="~/login.aspx" slidingExpiration="true" timeout="20" ></forms>
</authentication>
Đối với mỗi người dùng nếu bạn muốn đảm bảo một thư mục cụ thể, bạn có thể đặt thiết lập cho họ, hoặc trong tập tin web.config cha mẹ (thư mục gốc) hoặc file web.config của thư mục đó.
Xác định cài đặt Role cho thư mục trong file web.config gốc (trong trường hợp này cho quản lý)
<location path="Admin">
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Viết mã này bên ngoài nhưng dưới thẻ trong file web.config của root. Ở đây, tôi xác định rằng nếu đường dẫn chứa tên của thư mục Admin thì chỉ người dùng có vai trò "quản trị" mới được phép và tất cả người dùng khác đều bị từ chối.
Xác định cài đặt Role cho thư mục trong thư mục file web.config cụ thể (trong trường hợp này cho User)
<system.web>
<authorization>
<allow roles="User"/>
<deny users="*"/>
</authorization>
</system.web>
Viết mã này vào file web.config thư mục người dùng. Bạn cũng có thể chỉ định cài đặt cho người dùng trong tệp web.config của người chủ, cách tôi đã thực hiện cho Quản trị ở trên. Đây chỉ là một cách khác để chỉ định cài đặt. Cài đặt này phải được đặt dưới thẻ.
xác định cài đặt cho người dùng xác thực
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
Viết mã này vào file web.config của thư mục an toàn. Điều này xác định rằng tất cả người dùng ẩn danh đều bị từ chối cho thư mục này và chỉ những người dùng được xác thực mới được phép không phân biệt vai trò của họ.
hy vọng điều này sẽ cung cấp cho bạn ít ý tưởng để giải quyết vấn đề của mình. nó làm việc tốt cho tôi. hy vọng bạn cũng sẽ giải quyết được vấn đề của mình.