C# 当TextMode=";时如何验证密码;密码";
我正在使用VS2010中的默认主模板构建一个web应用程序—这是一个非常新的做法。我也在使用Login.aspx页面,但是没有使用内置的用户验证,我的用户信息在数据库表中。按照我发现的说明,我正在做类似的事情:C# 当TextMode=";时如何验证密码;密码";,c#,visual-studio-2010,.net-4.0,asna-visual-rpg,C#,Visual Studio 2010,.net 4.0,Asna Visual Rpg,我正在使用VS2010中的默认主模板构建一个web应用程序—这是一个非常新的做法。我也在使用Login.aspx页面,但是没有使用内置的用户验证,我的用户信息在数据库表中。按照我发现的说明,我正在做类似的事情: protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { Boolean bauthenticated = false; bauthenticated = isV
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
Boolean bauthenticated = false;
bauthenticated = isValidUser(Login1.UserName, Login1.Password);
if (bauthenticated)
{
e.Authenticated = true;
}
else
{
e.Authenticated = false;
}
}
问题是我把isValidUser方法放在了一个.dll中,这样它就可以在其他地方使用,而它没有收到密码,因为默认的行为是将它清空。我甚至尝试将字符串变量设置为Login1.Password,并传递该变量,但没有成功。我理解为什么会发生这种情况,但找不到任何关于如何正确操作的信息。我是否需要将用户名和密码放入对象并将其传递给我的类构造函数?我真的不想从我创建的每个Login.aspx页面连接到我的数据库,以避免通过http发送密码。尝试使用以下代码
protected void LoginButton_Click(object sender, EventArgs e)
{
try
{
dtUserDetails = new DataTable();
if (UserRepositoryBL.ValidateUser(LoginUser.UserName.Trim(), LoginUser.Password.Trim(), out dtUserDetails))
{
AuthUser au = new AuthUser();
if (dtUserDetails.Rows.Count > 0)
{
DataRow DR = dtUserDetails.Rows[0];
au.UserID = Convert.ToInt32(DR["UserID"].ToString());
au.UserNo = DR["UserNo"].ToString();
au.UserName = DR["UserName"].ToString();
au.Password = DR["Password"].ToString();
}
string userData = au.ToString();
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, // Version number
LoginUser.UserName.Trim(), // Username
DateTime.Now, // Issue date
DateTime.Now.AddMinutes(60), // Expiration date
false, // Persistent?
userData // User data
);
string eticket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie
(FormsAuthentication.FormsCookieName, eticket);
Response.Cookies.Add(cookie);
BasePage.ActivityLog("User Login", LoginUser.UserName.Trim(), true, Request.RawUrl);
string url = FormsAuthentication.GetRedirectUrl(LoginUser.UserName, false);
Response.Redirect(url);
// FormsAuthentication.RedirectFromLoginPage(LoginUser.UserName, false);
}
else
{
LoginUser.FailureText = "Your login attempt was not successful. Please try again.";
}
}
catch (Exception ex)
{
throw ex;
}
}
dtUserDetails是一个out参数,其中包含密码、用户名等用户详细信息。。成功登录后,如果登录无效,则datatable返回空。在userData字符串中,所有这些信息都将可用。然后,您可以使用用户身份验证票证从任何页面检索这些信息
检查您的方法是否有效?什么类型的对象是
Login1
?如果我在这里出错,请纠正我,但答案不是简单地不清空密码吗?您可以发布isValidUser
的代码吗?仅供参考-您的代码可以缩短为一行:e.Authenticated=isValidUser(Login1.UserName,Login1.Password)
。嗯-我花了两天时间研究这个问题,包括这里。我总是在万不得已的情况下发布问题,因此不确定为什么会将此标记为不显示努力或不有用。@Andre Calil-Login1是和asp:login控件,位于login.aspxThanks上,但如果我在自己的数据库中验证用户名和密码,如何成功登录?我没有使用成员资格模型-请参阅我上面的最后一条评论。此代码也没有使用membership.UserRepositoryBL.ValidateUser(LoginUser.UserName.Trim()、LoginUser.Password.Trim()、out dtUserDetails)方法调用您自己的数据库抱歉,我感到困惑,但您是否建议我将用户名和密码保存在数据表中,并将其传递给我的.dll?