我已经尝试过如何实现这一目标,但我能找到的一切看起来都太复杂和全面,以至于我无法真正理解它是如何运作的。以下是我的情况:
我有一个名为users
的简单 MySQL 表,其中包含三个属性:user_id
,username
和password
。
在 ASP.NET 页面中,我有两个文本框和一个登录按钮。
我读过我可以使用FormsAuthentication
,但我无法弄清楚它是如何工作的。我必须使用“会员”吗?或者我可以在没有它的情况下使用FormsAuthentication吗?我希望尽可能简单。
到目前为止,我只是做了一个像这样的选择:
String query = "SELECT * FROM users WHERE username = @UserName
AND password = @Password;";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@UserName", userName);
cmd.Parameters.AddWithValue("@Password", password);
在我的代码隐藏中,我有这个:
String username = txtUsername.Text;
String password = txtPassword.Text;
User user = database.LogIn(username, password);
最后在我的web.config文件中我有这个:
<authentication mode="Forms">
<forms name="MyCookieName"
loginUrl="~/Default.aspx"
timeout="10"
protection="All"
path="/">
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
到目前为止,我可以验证用户是否输入了有效输入,但我不明白如何应用FormsAuthentication。任何帮助表示赞赏。
答案 0 :(得分:0)
请参阅此link
忽略他们对存储过程的看法。然后查看此代码
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
MySqlConnection conn;
if(Request.IsAuthenticated)
{
try
{
conn = new MySqlConnection("server=Cheese;user id=george; password=blah; database=mysql; pooling=false");
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText =
"SELECT G.Name FROM Roles R INNER JOIN Groups G ON R.GroupID = G.GroupID INNER JOIN Users U ON R.UserID = U.UserID AND U.Username = ?";
cmd.Parameters.Add("UserName",User.Identity.Name);
conn.Open()
MySqlDataReader r = cmd.ExecuteReader();
ArrayList groups = new ArrayList();
while(r.Read())
{
groups.Add(r.GetString(0));
}
HttpContext.Current.User = new GenericPrincipal(User.Identity, groups.ToArray(typeof(System.String)));
}
finally
{
conn.Close();
}
}
}
如果有任何疑问,请与我们联系。
干杯
答案 1 :(得分:0)
表单身份验证与成员身份不同。 Explanation
您已正确设置所有内容。 Web.config是您启用Forms Auth的地方,它本质上是一个检查ASPXAUTH cookie的HTTP模块。为了在验证密码后最初在代码中设置cookie:
FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie);
我认为这是在System.Web.dll
,System.Web.Security
名称空间。
您的后续请求将包含您指定的用户名。
请记住,以纯文本格式存储密码是个坏主意。使用散列。
答案 2 :(得分:0)
string username,password;
if(username=="mohammadreza"&password=="12345")
{
messageox.show("welcome");
form1.activeform.enable=true;
}