下面是“.NET实现网站用户登录认证”的完整攻略:
1. 创建一个ASP.NET Web应用程序
首先,打开Visual Studio IDE,然后在File菜单中选择New -> Project。在新建项目窗口中选择Web -> ASP.NET Web应用程序。
在下一步中,给你的应用程序命名,并选择“Empty”模板。
2. 配置Web.config文件
接下来,我们需要在Web.config文件中修改配置。配置Web.config文件前,你需要在Visual Studio中启动你的应用程序,使用Visual Studio 自己的Web服务器或IIS Express。
在Web.config文件中添加以下配置:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
这里我们将Web应用程序认证模式设置为“Forms”,并配置了登录页面的路径和认证超时时间。
3. 创建用户登录页面
我们需要创建一个登录页面,用户可以在这里输入自己的用户名和密码。
在你的应用程序中添加一个文件夹“Account”,然后添加一个新的ASP.NET Web表单,名称命名为“Login.aspx”。
在Login.aspx页面中添加两个文本框(对应用户名和密码)和一个登录按钮。
4. 创建用户数据库
我们需要在应用程序中创建一个用户数据库,用于存储用户的用户名和密码信息。
在Visual Studio中打开Server Explorer,选择你的数据库服务器。在数据库服务器上单击鼠标右键,在快捷菜单中选择“Add New Database”。
在弹出的窗口中为数据库命名,并选择“SQL Server”作为数据库服务器类型。接着,点击“Advanced”选项卡,修改“Connection String”为具体的数据库连接字符串。最后,点击确定按钮即可创建一个新的数据库。
在数据库中创建一个新的表,用于存储用户信息。表中至少需要包含id、username和password三个字段。
5. 编写用户认证代码
我们需要编写一个代码来实现用户认证。在“.Net”的世界中,我们通常使用Membership API来实现。
在Login.aspx.cs文件中添加以下代码:
protected void btnLogin_Click(object sender, EventArgs e)
{
if (Membership.ValidateUser(txtUserName.Text, txtPassword.Text))
{
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked);
}
else
{
lblError.Text = "Invalid username or password.";
}
}
这里我们使用Membership API的ValidateUser方法来验证用户是否存在于我们的用户数据库中,如果用户存在就重定向页面到主页,并附带用户名和“记住我”选项。如果验证失败,我们则显示错误信息。
最后,打开Global.asax.cs文件并添加以下代码:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
}
这里我们添加代码,用于解密保存在Cookie中的用户信息。
至此,我们已经实现了使用“.NET实现网站用户登录认证”的完整攻略。
为了说明示例,请看以下两种不同的实现:
示例1:
在表单验证部分使用sharpedsecurity库,代码如下:
protected void btnLogin_Click(object sender, EventArgs e)
{
string username = txtUserName.Text;
string pass = txtPassword.Text;
UserLoginResult result = Membership.ValidateUser(username, pass);
if (result.IsSuccess)
{
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkRememberMe.Checked);
}
else
{
lblError.Text = result.Message;
}
}
示例2:
在Global.asax文件中的Application_AuthenticateRequest
方法中添加角色授权,代码如下:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);
}
}
string[] allowedRoles = { "admin" };
if (HttpContext.Current.User.Identity.IsAuthenticated && !allowedRoles.Contains(HttpContext.Current.User.Identity.Name))
{
HttpContext.Current.Response.StatusCode = 403;
HttpContext.Current.Response.End();
}
}
在这里,我们只允许使用具有“admin”角色的用户访问我们的应用程序。如果用户没有这个角色,我们将抛出一个403错误。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net实现网站用户登录认证 - Python技术站