diff --git a/backend/src/handlers/auth.rs b/backend/src/handlers/auth.rs index 2d20ed6..54baa23 100644 --- a/backend/src/handlers/auth.rs +++ b/backend/src/handlers/auth.rs @@ -36,11 +36,16 @@ pub async fn login_handler( jar: CookieJar, Json(payload): Json, ) -> impl IntoResponse { + tracing::info!("Login attempt for user: {}", payload.username); + let user = match state.db.get_user_by_username(&payload.username).await { Ok(Some(u)) => u, - Ok(None) => return (StatusCode::UNAUTHORIZED, "Invalid credentials").into_response(), + Ok(None) => { + tracing::warn!("Login failed: User not found for {}", payload.username); + return (StatusCode::UNAUTHORIZED, "Invalid credentials").into_response(); + } Err(e) => { - tracing::error!("DB error during login: {}", e); + tracing::error!("DB error during login for {}: {}", payload.username, e); return (StatusCode::INTERNAL_SERVER_ERROR, "Database error").into_response(); } }; @@ -49,6 +54,8 @@ pub async fn login_handler( match bcrypt::verify(&payload.password, &password_hash) { Ok(true) => { + tracing::info!("Password verified for user: {}", payload.username); + // Create session let token: String = (0..32).map(|_| { use rand::{distributions::Alphanumeric, Rng}; @@ -60,7 +67,7 @@ pub async fn login_handler( let expires_at = time::OffsetDateTime::now_utc().unix_timestamp() + expires_in; if let Err(e) = state.db.create_session(user_id, &token, expires_at).await { - tracing::error!("Failed to create session: {}", e); + tracing::error!("Failed to create session for {}: {}", payload.username, e); return (StatusCode::INTERNAL_SERVER_ERROR, "Failed to create session").into_response(); } @@ -71,9 +78,17 @@ pub async fn login_handler( .max_age(Duration::seconds(expires_in)) .build(); + tracing::info!("Session created and cookie set for user: {}", payload.username); (StatusCode::OK, jar.add(cookie), "Login successful").into_response() } - _ => (StatusCode::UNAUTHORIZED, "Invalid credentials").into_response(), + Ok(false) => { + tracing::warn!("Login failed: Invalid password for {}", payload.username); + (StatusCode::UNAUTHORIZED, "Invalid credentials").into_response() + } + Err(e) => { + tracing::error!("Bcrypt error for {}: {}", payload.username, e); + (StatusCode::INTERNAL_SERVER_ERROR, "Auth error").into_response() + } } } diff --git a/frontend/src/components/auth/login.rs b/frontend/src/components/auth/login.rs index 689cf0d..92241c6 100644 --- a/frontend/src/components/auth/login.rs +++ b/frontend/src/components/auth/login.rs @@ -20,6 +20,8 @@ pub fn Login() -> impl IntoView { set_loading.set(true); set_error.set(None); + logging::log!("Attempting login for user: {}", username.get()); + spawn_local(async move { let req = LoginRequest { username: username.get(), @@ -32,15 +34,19 @@ pub fn Login() -> impl IntoView { match client.send().await { Ok(resp) => { + logging::log!("Login response status: {}", resp.status()); if resp.ok() { - // Redirect to home on success - let navigate = use_navigate(); - navigate("/", Default::default()); + logging::log!("Login successful, redirecting..."); + // Force a full reload to re-run auth checks in App.rs + let _ = window().location().set_href("/"); } else { + let text = resp.text().await.unwrap_or_default(); + logging::error!("Login failed: {}", text); set_error.set(Some("Kullanıcı adı veya şifre hatalı".to_string())); } } - Err(_) => { + Err(e) => { + logging::error!("Network error: {}", e); set_error.set(Some("Bağlantı hatası".to_string())); } } diff --git a/frontend/src/components/auth/setup.rs b/frontend/src/components/auth/setup.rs index 3651dd3..4434a14 100644 --- a/frontend/src/components/auth/setup.rs +++ b/frontend/src/components/auth/setup.rs @@ -49,9 +49,8 @@ pub fn Setup() -> impl IntoView { match client.send().await { Ok(resp) => { if resp.ok() { - // Redirect to login after setup - let navigate = use_navigate(); - navigate("/login", Default::default()); + // Redirect to login after setup (full reload to be safe) + let _ = window().location().set_href("/login"); } else { let text = resp.text().await.unwrap_or_default(); set_error.set(Some(format!("Hata: {}", text)));