Asp.net 如何在不使用asp控件的情况下对登录表单进行身份验证
我已经建立了一个非常好的登录页面,其中我使用HTML输入标记作为我的用户名、密码和登录按钮。我有两种不同的登录表单,每种类型的用户(学生用户和业务用户)一种。我从未对数据库进行过身份验证,因此我认为我的方法很容易执行。在网上搜寻了一些简单的方法来实现我已经拥有的东西之后,我发现如果不使用Asp.net 如何在不使用asp控件的情况下对登录表单进行身份验证,asp.net,vb.net,login,forms-authentication,Asp.net,Vb.net,Login,Forms Authentication,我已经建立了一个非常好的登录页面,其中我使用HTML输入标记作为我的用户名、密码和登录按钮。我有两种不同的登录表单,每种类型的用户(学生用户和业务用户)一种。我从未对数据库进行过身份验证,因此我认为我的方法很容易执行。在网上搜寻了一些简单的方法来实现我已经拥有的东西之后,我发现如果不使用asp:login控件,我几乎不可能想出如何实现我的目标。我不情愿地放弃了我所拥有的,并加入了asp:login控件。我的问题是,这是一个痛苦的实现(创建存储过程,弄乱web.config),它看起来很可怕,因为
asp:login
控件,我几乎不可能想出如何实现我的目标。我不情愿地放弃了我所拥有的,并加入了asp:login
控件。我的问题是,这是一个痛苦的实现(创建存储过程,弄乱web.config),它看起来很可怕,因为它不符合我以前编写的CSS,我使用的FormsAuthentication只允许我在登录后重定向一个用户(成功登录后返回主页门户,登录失败后返回登录页面。)使用my Web.config中的身份验证表单模式:
<forms defaultUrl="~/InteriorStudentPortal.aspx" loginUrl="~/ExteriorLogin.aspx" slidingExpiration="true" timeout="2880"></forms>
连同背面代码:
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.Security
Partial Class ExteriorLogin
Inherits System.Web.UI.Page
Protected Sub ValidateStudent(sender As Object, e As AuthenticateEventArgs) Handles Login1.Authenticate
Dim studentId As Integer = 0
Dim constr As String = ConfigurationManager.ConnectionStrings("DatabaseConnectionString").ConnectionString
Using con As New SqlConnection(constr)
Using cmd As New SqlCommand("Validate_Student")
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@Username", Login1.UserName)
cmd.Parameters.AddWithValue("@Password", Login1.Password)
cmd.Connection = con
con.Open()
studentId = Convert.ToInt32(cmd.ExecuteScalar())
con.Close()
End Using
Select Case studentId
Case -1
Login1.FailureText = "Username and/or password is incorrect."
Exit Select
Case -2
Login1.FailureText = "Account has not been activated."
Exit Select
Case Else
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet)
Exit Select
End Select
End Using
End Sub
End Class
我的目标是继续使用asp:login
控件,并找出如何在登录后允许多个用户重定向……或者最好是,在不使用asp:login
的情况下进行身份验证,并使用我原来的HTML和CSS。以下是我在使用asp控件之前所做的:
<%-- STUDENT LOGIN --%>
<div class="student_login">
<div id="wrapper">
<form name="login-form" class="login-form" action="" method="post">
<div class="header">
<h1>Student Login</h1>
<span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
</div>
<div class="content">
<input name="username" type="text" class="input username" placeholder="Username" />
<input name="password" type="password" class="input password" placeholder="Password" />
</div>
<div class="footer">
<input type="submit" name="submit" value="Login" class="button" />
<a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
</div>
</form>
</div>
</div><!--close student_login-->
学生登录
在下面登录,开始展示你的技能、挣钱和获得宝贵经验……我提到过挣钱吗。
注意:这段代码是在内容占位符中编写的。母版页确实有一个
标记包含在页面正文中。我没有此特定方法的任何后台代码,因为我确实不知道如何在不使用asp:login
控件和FormsAuthentication
的情况下进行身份验证。是否可以继续e请帮助我了解如何在没有asp:login的情况下完成身份验证,这样我就可以保留我精心设计的登录表单?请慷慨或友好地给出评论/解释,这是我的第一个登录表单,所以我没有这样做的经验。您可以使用login
c的LayoutTemplate
控制做你想做的事
诀窍在于,您需要使用一个带有FailureText的ID
的Literal
,用户字段是一个带有用户名的ID
的TextBox
,另一个带有密码的ID
的TextBox
您还需要触发一个登录
命令,该命令可以是一个按钮
这允许您自定义自己的布局,我自己也做过几次。下面是一个未经测试的快速复制/粘贴版本,以您的HTML为例
请参阅MSDN参考,网址为
不得不对CSS进行一点重构,但经过一些小的修改后,效果非常好。谢谢。
<%-- STUDENT LOGIN --%>
<div class="student_login">
<div id="wrapper">
<form name="login-form" class="login-form" action="" method="post">
<div class="header">
<h1>Student Login</h1>
<span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
</div>
<div class="content">
<input name="username" type="text" class="input username" placeholder="Username" />
<input name="password" type="password" class="input password" placeholder="Password" />
</div>
<div class="footer">
<input type="submit" name="submit" value="Login" class="button" />
<a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
</div>
</form>
</div>
</div><!--close student_login-->
<asp:Login ID="Login1" runat="server"
OnAuthenticate="ValidateStudent"
Width="100%">
<LayoutTemplate>
<div class="student_login">
<div id="wrapper">
<asp:Literal ID="FailureText" runat="server"></asp:Literal>
<asp:ValidationSummary ID="vsLogin" runat="server" ValidationGroup="Login" />
<div class="header">
<h1>Student Login</h1>
<span>Sign in below to login to start showing your skills, earning money, and gaining valuable experience...and did I mention earning MONEY.</span>
</div>
<div class="content">
<asp:TextBox id="UserName" runat="server" CssClass="input username" placeholder="Enter your username"></asp:TextBox>
<asp:RequiredFieldValidator id="rfvUserName" runat="server"
ControlToValidate="UserName"
Display="None"
ErrorMessage="Username is required"
ValidationGroup="Login">
</asp:RequiredFieldValidator>
<asp:TextBox id="Password" runat="server" CssClass="input password" TextMode="Password" placeholder="Password"></asp:TextBox>
<asp:RequiredFieldValidator id="rfvPassword" runat="server"
ControlToValidate="Password"
Display="None"
ErrorMessage="Password is required"
ValidationGroup="Login">
</asp:RequiredFieldValidator>
</div>
<div class="footer">
<asp:Button ID="Login" runat="server" CommandName="Login" CssClass="button" Text="Login" ValidationGroup="Login" />
<a href="ExteriorStudentTestimonials.aspx#register" class="register">Register</a>
</div>
</div>
</div>
</LayoutTemplate>
</asp:Login>