Bạn duy trì một ứng dụng hiện có với một cơ sở người dùng được thiết lập. Theo thời gian, người ta đã quyết định rằng kỹ thuật băm mật khẩu hiện tại đã lỗi thời và cần được nâng cấp. Hơn nữa, vì lý do UX, bạn không muốn người dùng hiện tại bị buộc phải cập nhật mật khẩu của họ. Toàn bộ cập nhật băm mật khẩu cần phải xảy ra đằng sau màn hình.
Giả sử mô hình cơ sở dữ liệu 'đơn giản hóa' cho người dùng có chứa:
- ID
- Mật khẩu
Làm thế nào để một người đi xung quanh để giải quyết một yêu cầu như vậy?
Suy nghĩ hiện tại của tôi là:
- tạo một phương thức băm mới trong lớp thích hợp
- cập nhật bảng người dùng trong cơ sở dữ liệu để giữ trường mật khẩu bổ sung
- Khi người dùng đăng nhập thành công bằng cách sử dụng hàm băm mật khẩu lỗi thời, hãy điền vào trường mật khẩu thứ hai bằng hàm băm được cập nhật
Điều này cho tôi một vấn đề là tôi không thể phân biệt hợp lý giữa người dùng có và những người chưa cập nhật hàm băm mật khẩu của họ và do đó sẽ buộc phải kiểm tra cả hai. Điều này có vẻ thiếu sót khủng khiếp.
Hơn nữa, điều này về cơ bản có nghĩa là kỹ thuật băm cũ có thể bị buộc phải ở lại vô thời hạn cho đến khi mỗi người dùng duy nhất cập nhật mật khẩu của họ. Chỉ tại thời điểm đó, tôi mới có thể bắt đầu loại bỏ kiểm tra băm cũ và loại bỏ trường cơ sở dữ liệu thừa.
Tôi chủ yếu tìm kiếm một số mẹo thiết kế ở đây, vì 'giải pháp' hiện tại của tôi là bẩn, không đầy đủ và không, nhưng nếu mã thực tế là bắt buộc để mô tả một giải pháp có thể, hãy sử dụng bất kỳ ngôn ngữ nào.