1

私のコントローラーでは、次のように CSV からユーザーを読み取ります。

var users = Utilities.GetUsersFromCSV(path, userType, course);

これは CSV ファイルを読み取り、Userそれを使用してオブジェクトを構築します。おそらく関連する部分の 1 つは、パスワードの作成です。

public static List<User> GetUsersFromCSV(string filepath, string userType, Course course) {
    var users = new List<User>();
    var user = new User();
    GeneratePassword(ref user);
    return users;
}

private static void GeneratePassword(ref User user) {
    var size = Rand.Value.Next(0, 3) + 8;
    var sb = new StringBuilder();

    var shuffledlist = Chars.OrderBy(a => Guid.NewGuid()).ToList();

    for (var i = 0; i < size; i++) {
          sb.Append((char) shuffledlist[i]);
    }

    user.Password = sb.ToString();
}

ユーザーが CSV ファイルから作成された後、次のようにデータベースに追加します。

_userRepository.AddUsers(Utilities.HashPasswords(users));

どの呼び出し

public static List<User> HashPasswords(List<User> users) {
   var newList = new List<User>(users);
   foreach (var user in newList) {
        user.Password = CalculateSha1Hash(user.Password, user.Login);
   }

   return newList;
}

この回答によると、リポジトリに送信されているユーザーリストにはハッシュされたパスワードが含まれているusersはずですが、コントローラーのリストには元のパスワードが含まれているはずです。HashPasswordsただし、デバッグ中に、 のパスワードにも影響することに気付きましたusers

これは何が原因ですか?

4

1 に答える 1

4

オブジェクトはnewList浅いコピーです。Select元のリストでLinq を使用して、ディープ コピーを作成します。

newList = users.Select(u => CopyAndChangePassword(u));
于 2013-10-31T14:33:35.573 に答える