From e8580b93141f32ac119bcc6ec0deaba36e5de2c1 Mon Sep 17 00:00:00 2001 From: fish Date: Mon, 13 Apr 2026 21:23:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3=20JWT=20?= =?UTF-8?q?=E6=9C=89=E6=95=88=E6=9C=9F=E8=B0=83=E6=95=B4=E4=B8=BA=207=20?= =?UTF-8?q?=E5=A4=A9=EF=BC=8Csub=20=E6=94=B9=E4=B8=BA=20user=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user-service/user-login-account/src/main.rs | 14 +++++++------- services/user-service/user-login-email/src/main.rs | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/services/user-service/user-login-account/src/main.rs b/services/user-service/user-login-account/src/main.rs index 72e7779..ff7d8d8 100644 --- a/services/user-service/user-login-account/src/main.rs +++ b/services/user-service/user-login-account/src/main.rs @@ -91,8 +91,8 @@ async fn login_handler( info!("Login attempt for user: {}", payload.username); // 查询用户账号与密码 - let user: Option<(String,)> = sqlx::query_as( - "SELECT p.password \ + let user: Option<(uuid::Uuid, String)> = sqlx::query_as( + "SELECT a.user_id, p.password \ FROM user_login_account a \ JOIN user_login_password p ON a.user_id = p.user_id \ WHERE a.account = $1 AND a.deleted = FALSE AND p.deleted = FALSE" @@ -103,7 +103,7 @@ async fn login_handler( .unwrap_or(None); match user { - Some((password_hash,)) => { + Some((user_id, password_hash)) => { // 验证密码 tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len()); match verify(&payload.password, &password_hash) { @@ -111,7 +111,7 @@ async fn login_handler( info!("User {} logged in successfully", payload.username); // 生成 JWT - let token = generate_token(&payload.username, &state.jwt_secret); + let token = generate_token(&user_id.to_string(), &state.jwt_secret); ( StatusCode::OK, @@ -166,12 +166,12 @@ async fn health_handler() -> &'static str { } // 生成 JWT Token -fn generate_token(username: &str, secret: &str) -> String { +fn generate_token(sub: &str, secret: &str) -> String { let now = Utc::now(); - let exp = now + Duration::hours(24); + let exp = now + Duration::days(7); let claims = Claims { - sub: username.to_string(), + sub: sub.to_string(), iat: now.timestamp() as usize, exp: exp.timestamp() as usize, }; diff --git a/services/user-service/user-login-email/src/main.rs b/services/user-service/user-login-email/src/main.rs index 896c13b..792d6fc 100644 --- a/services/user-service/user-login-email/src/main.rs +++ b/services/user-service/user-login-email/src/main.rs @@ -91,8 +91,8 @@ async fn login_handler( info!("Login attempt for email: {}", payload.email); // 查询用户邮箱与密码 - let user: Option<(String,)> = sqlx::query_as( - "SELECT p.password \ + let user: Option<(uuid::Uuid, String)> = sqlx::query_as( + "SELECT e.user_id, p.password \ FROM user_login_email e \ JOIN user_login_password p ON e.user_id = p.user_id \ WHERE e.email = $1 AND e.deleted = FALSE AND p.deleted = FALSE" @@ -103,7 +103,7 @@ async fn login_handler( .unwrap_or(None); match user { - Some((password_hash,)) => { + Some((user_id, password_hash)) => { // 验证密码 tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len()); match verify(&payload.password, &password_hash) { @@ -111,7 +111,7 @@ async fn login_handler( info!("Email {} logged in successfully", payload.email); // 生成 JWT - let token = generate_token(&payload.email, &state.jwt_secret); + let token = generate_token(&user_id.to_string(), &state.jwt_secret); ( StatusCode::OK, @@ -166,12 +166,12 @@ async fn health_handler() -> &'static str { } // 生成 JWT Token -fn generate_token(email: &str, secret: &str) -> String { +fn generate_token(sub: &str, secret: &str) -> String { let now = Utc::now(); - let exp = now + Duration::hours(24); + let exp = now + Duration::days(7); let claims = Claims { - sub: email.to_string(), + sub: sub.to_string(), iat: now.timestamp() as usize, exp: exp.timestamp() as usize, };