登录接口 JWT 有效期调整为 7 天,sub 改为 user_id
This commit is contained in:
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user