first(); if (!$user) { return null; } // Tránh lỗi Hash::check() với MD5 if ($this->isBcryptHash($user->password)) { if (Hash::check($password, $user->password)) { return new User($user->id); } } else { // Hash không phải bcrypt, kiểm tra MD5 thủ công if (md5($password) === $user->password) { // Nâng cấp mật khẩu lên bcrypt $user->password = Hash::make($password); $user->save(); return new User($user->id); } } return null; } // Thêm method kiểm tra thuật toán hash protected function isBcryptHash($hashedPassword): bool { return password_get_info($hashedPassword)['algo'] === PASSWORD_BCRYPT; } }