Как проверить пароль и имя пользователя для сайта в C#
У меня есть простой веб-сайт для входа, который является моим первым проектом веб-сайта в Visual Studio 2015. Я успешно создал базу данных SQL, которая содержит информацию о пользователе, такую как имя пользователя, пароль, адрес электронной почты и страна, и я также успешно создал страницу регистрации пользователя, где новый пользователь может ввести там данные, и эти данные будут добавлены в базу данных. Это все отлично работает.
но я наткнулся на контрольно-пропускной пункт при попытке проверить имя пользователя и пароль по сохраненным значениям в строке, содержащей данные пользователя в базе данных SQL, чтобы предоставить пользователю доступ только к страницам участника.
Вот мой фрагмент кода, когда пользователь нажимает кнопку входа в систему.
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString);
con.Open();
string checkUser = "SELECT * FROM Members where Username= '" + TextBoxSignUser.Text + "' and Password= '" + TextBoxSignPass.Text + "'";
SqlCommand cmd = new SqlCommand(checkUser, con);
cmd.ExecuteNonQuery();
con.Close();
Я знаю, что мне нужно сделать, вероятно, что-то вроде этого псевдокода ниже, но я не уверен, как пройти проверку этой информации по сохраненным значениям в базе данных.
if ("Username" and "Password" == the value of Username and Password TextBox.Text)
{
Response.Write("Sign in successful");
Response.Redirect("MemberTestPage.aspx");
}
else
{
Response.Write("Details incorrect, Please try again")
}
5 ответов
Я думаю, что в первую очередь лучше использовать библиотеки ADO.NET по ряду причин, таких как лучшая производительность и высокий уровень безопасности. Вот мое предложение. надеюсь быть полезным для вас:
using System.Data.SqlClient;
...
string conStr = ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString;
string sql = "SELECT * FROM Members where Username = @user and Password = @pass";
SqlParameter pUser = new SqlParameter("@user", TextBoxSignUser.Text);
SqlParameter pPass = new SqlParameter("@pass", TextBoxSignPass.Text);
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add(pUser);
cmd.Parameters.Add(pPass);
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
// Successfully signed in
// Also you can access your fields' value using:
// 1. its index (e.x. reader[0])
// 2. or its name: (e.x. reader["Username"])
}
else
{
// Login failed
}
}
}
}
Заполните таблицу данных с помощью адаптера данных, после чего вы получите данные в таблицу данных, вы можете получить возвращаемые значения запроса и сопоставить параметры
DataTable Dt = new Datatable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
if (dt.rows.count > 0 )
{
//MATCH FOUND
}
Вы можете использовать как..
string query= "SELECT * FROM Members where Username= 'usr' and Password= 'pwd'";
SqlCommand cmd = new SqlCommand(query, con);
MySqlDataAdapter objda = new MySqlDataAdapter(cmd);
DataSet objDs = new DataSet();
objda.Fill(objDs);
if(objDs.Tables[0].Rows.Count>0)
{
Response.Write("Sign in successful");
Response.Redirect("MemberTestPage.aspx");
}
Вы можете сделать следующее без использования наборов данных,
var con = new SqlConnection("your connection string goes here");
SqlCommand cmd = new SqlCommand("SELECT * FROM Members where Username= 'usr' and Password= 'pwd'", con);
bool result = false;
cmd.Connection.Open();
using (cmd.Connection)
{
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
result = true;
}
if (result == true)
// Login successful
else
// Login failed
string query = string.Format("SELECT TOP 1 * FROM [Table] WHERE Username = '{0}' and Password = '{1}'", txtUsername.Text, txtPassword.Text);
command = new OleDbCommand(query, con);
var reader = command.ExecuteReader();
if (reader.HasRows)
{
//successfully login
}
else
//error message