登录接口 JWT 有效期调整为 7 天,sub 改为 user_id

This commit is contained in:
fish
2026-04-13 21:23:02 +08:00
parent 677a400392
commit e8580b9314
2 changed files with 14 additions and 14 deletions

View File

@@ -91,8 +91,8 @@ async fn login_handler(
info!("Login attempt for user: {}", payload.username); info!("Login attempt for user: {}", payload.username);
// 查询用户账号与密码 // 查询用户账号与密码
let user: Option<(String,)> = sqlx::query_as( let user: Option<(uuid::Uuid, String)> = sqlx::query_as(
"SELECT p.password \ "SELECT a.user_id, p.password \
FROM user_login_account a \ FROM user_login_account a \
JOIN user_login_password p ON a.user_id = p.user_id \ JOIN user_login_password p ON a.user_id = p.user_id \
WHERE a.account = $1 AND a.deleted = FALSE AND p.deleted = FALSE" WHERE a.account = $1 AND a.deleted = FALSE AND p.deleted = FALSE"
@@ -103,7 +103,7 @@ async fn login_handler(
.unwrap_or(None); .unwrap_or(None);
match user { match user {
Some((password_hash,)) => { Some((user_id, password_hash)) => {
// 验证密码 // 验证密码
tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len()); tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len());
match verify(&payload.password, &password_hash) { match verify(&payload.password, &password_hash) {
@@ -111,7 +111,7 @@ async fn login_handler(
info!("User {} logged in successfully", payload.username); info!("User {} logged in successfully", payload.username);
// 生成 JWT // 生成 JWT
let token = generate_token(&payload.username, &state.jwt_secret); let token = generate_token(&user_id.to_string(), &state.jwt_secret);
( (
StatusCode::OK, StatusCode::OK,
@@ -166,12 +166,12 @@ async fn health_handler() -> &'static str {
} }
// 生成 JWT Token // 生成 JWT Token
fn generate_token(username: &str, secret: &str) -> String { fn generate_token(sub: &str, secret: &str) -> String {
let now = Utc::now(); let now = Utc::now();
let exp = now + Duration::hours(24); let exp = now + Duration::days(7);
let claims = Claims { let claims = Claims {
sub: username.to_string(), sub: sub.to_string(),
iat: now.timestamp() as usize, iat: now.timestamp() as usize,
exp: exp.timestamp() as usize, exp: exp.timestamp() as usize,
}; };

View File

@@ -91,8 +91,8 @@ async fn login_handler(
info!("Login attempt for email: {}", payload.email); info!("Login attempt for email: {}", payload.email);
// 查询用户邮箱与密码 // 查询用户邮箱与密码
let user: Option<(String,)> = sqlx::query_as( let user: Option<(uuid::Uuid, String)> = sqlx::query_as(
"SELECT p.password \ "SELECT e.user_id, p.password \
FROM user_login_email e \ FROM user_login_email e \
JOIN user_login_password p ON e.user_id = p.user_id \ JOIN user_login_password p ON e.user_id = p.user_id \
WHERE e.email = $1 AND e.deleted = FALSE AND p.deleted = FALSE" WHERE e.email = $1 AND e.deleted = FALSE AND p.deleted = FALSE"
@@ -103,7 +103,7 @@ async fn login_handler(
.unwrap_or(None); .unwrap_or(None);
match user { match user {
Some((password_hash,)) => { Some((user_id, password_hash)) => {
// 验证密码 // 验证密码
tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len()); tracing::debug!("Verifying password: input_len={}, hash_len={}", payload.password.len(), password_hash.len());
match verify(&payload.password, &password_hash) { match verify(&payload.password, &password_hash) {
@@ -111,7 +111,7 @@ async fn login_handler(
info!("Email {} logged in successfully", payload.email); info!("Email {} logged in successfully", payload.email);
// 生成 JWT // 生成 JWT
let token = generate_token(&payload.email, &state.jwt_secret); let token = generate_token(&user_id.to_string(), &state.jwt_secret);
( (
StatusCode::OK, StatusCode::OK,
@@ -166,12 +166,12 @@ async fn health_handler() -> &'static str {
} }
// 生成 JWT Token // 生成 JWT Token
fn generate_token(email: &str, secret: &str) -> String { fn generate_token(sub: &str, secret: &str) -> String {
let now = Utc::now(); let now = Utc::now();
let exp = now + Duration::hours(24); let exp = now + Duration::days(7);
let claims = Claims { let claims = Claims {
sub: email.to_string(), sub: sub.to_string(),
iat: now.timestamp() as usize, iat: now.timestamp() as usize,
exp: exp.timestamp() as usize, exp: exp.timestamp() as usize,
}; };