Fix Redis username: auto-correct empty username to 'redis' when password is present
This commit is contained in:
@@ -48,7 +48,7 @@ impl AppState {
|
|||||||
|
|
||||||
// Парсим URL для детального анализа
|
// Парсим URL для детального анализа
|
||||||
log::warn!("🔍 Parsing Redis URL...");
|
log::warn!("🔍 Parsing Redis URL...");
|
||||||
match url::Url::parse(&redis_url) {
|
let final_redis_url = match url::Url::parse(&redis_url) {
|
||||||
Ok(parsed_url) => {
|
Ok(parsed_url) => {
|
||||||
log::warn!("✅ Redis URL parsed successfully");
|
log::warn!("✅ Redis URL parsed successfully");
|
||||||
log::warn!(" Host: {}", parsed_url.host_str().unwrap_or("none"));
|
log::warn!(" Host: {}", parsed_url.host_str().unwrap_or("none"));
|
||||||
@@ -57,27 +57,30 @@ impl AppState {
|
|||||||
let username = parsed_url.username();
|
let username = parsed_url.username();
|
||||||
let password = parsed_url.password();
|
let password = parsed_url.password();
|
||||||
|
|
||||||
// Определяем правильное имя пользователя для диагностики
|
log::warn!(" Username: '{}'", username);
|
||||||
let effective_username = if username.is_empty() && password.is_some() {
|
|
||||||
"redis" // Дефолтное имя пользователя для Redis
|
|
||||||
} else {
|
|
||||||
username
|
|
||||||
};
|
|
||||||
|
|
||||||
log::warn!(" Username: '{}' (effective: '{}')", username, effective_username);
|
|
||||||
log::warn!(" Password: {}", if password.is_some() { "***" } else { "none" });
|
log::warn!(" Password: {}", if password.is_some() { "***" } else { "none" });
|
||||||
|
|
||||||
|
// Если username пустой и есть пароль, исправляем URL
|
||||||
if username.is_empty() && password.is_some() {
|
if username.is_empty() && password.is_some() {
|
||||||
log::warn!(" ℹ️ Redis client will use default username 'redis' for authentication");
|
let corrected_url = redis_url.replace("redis://:", "redis://redis:");
|
||||||
|
log::warn!(" 🔧 Correcting URL to use explicit username 'redis'");
|
||||||
|
corrected_url
|
||||||
|
} else {
|
||||||
|
redis_url
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("❌ Failed to parse Redis URL: {}", e);
|
log::error!("❌ Failed to parse Redis URL: {}", e);
|
||||||
panic!("Invalid Redis URL: {}", e);
|
panic!("Invalid Redis URL: {}", e);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
|
// Используем исправленный URL
|
||||||
|
Self::create_app_state_with_redis_url(security_config, final_redis_url).await
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Создает AppState с указанным Redis URL.
|
||||||
|
async fn create_app_state_with_redis_url(security_config: SecurityConfig, redis_url: String) -> Self {
|
||||||
let redis_client = match RedisClient::open(redis_url) {
|
let redis_client = match RedisClient::open(redis_url) {
|
||||||
Ok(client) => {
|
Ok(client) => {
|
||||||
log::warn!("✅ Redis client created successfully");
|
log::warn!("✅ Redis client created successfully");
|
||||||
|
|||||||
Reference in New Issue
Block a user