Cześć,
Robię metodę, która sprawdza czy haszowane hasło i haszowana Nazwa(login) użytkownika występują w bazie danych. Mam problem którego nie rozumiem bo inicjuje tablice string hashLogin i hashPassword które są puste i nie podaje statycznego rozmiaru do nich. Później w pierwszej iteracji pętli while chcę przypisać do hashLogin[i] wartość z bazy danych. Po tej linijce program się przerywa wyrzuca błąd "Index was outside the bounds of the array" i hashLogin[i] = reader.GetString(1);
Za rozjaśnienie mi tego problemu szczere dzięki.
private bool ValidateUser(SiteUser user)
{
string myCompanyDBcs = _configuration.GetConnectionString("Sport_ShopContext");
//IList<SiteUser> helpUser;
string[] hashLogin = new string[] { };
string[] hashPassword = new string[] { };
int professionId = 0; //Id statusu jaki ma użytkownik
byte[] _salt = new byte[128 / 8];
SqlConnection con = new SqlConnection(myCompanyDBcs);
string sql = "SELECT * FROM Users";
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
int i = 0;
while (reader.Read())
{
hashLogin[i] = reader.GetString(1);
hashPassword[i] = reader.GetString(2);
professionId = Int32.Parse(reader["professionId"].ToString());
_salt = (byte[])reader["salt"];
i++;
}
reader.Close();
con.Close();
string userName = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: user.userName,
salt: _salt,
prf: KeyDerivationPrf.HMACSHA256,
iterationCount: 1000,
numBytesRequested: 256 / 8));
string userPassword = Convert.ToBase64String(KeyDerivation.Pbkdf2(
password: user.password,
salt: _salt,
prf: KeyDerivationPrf.HMACSHA256,
iterationCount: 1000,
numBytesRequested: 256 / 8));
ProfessionId = professionId;
int loginAmount = i;
// i = 0;
for (i = 0; i < loginAmount; i++)
{
if ((userName == hashLogin[i]) && (userPassword == hashPassword[i]))
{
return true;
}
//else
//{
// return false;
//}
}
return false;
}