fix(auth): web_login_confirm 查询改为精确匹配 code,修复 unwrap_or(None) 问题

This commit is contained in:
2026-04-24 11:01:16 +08:00
parent c66d1303ef
commit 92fb4e3687

View File

@@ -7,7 +7,7 @@ use tracing::{debug, error, info, warn};
use crate::auth::{generate_token, generate_refresh_token, verify_refresh_token};
use crate::db;
use crate::error::ErrorResponse;
use crate::error::{AppError, ErrorResponse};
use crate::models::Claims;
use crate::models::{
AppState, LoginResponse, RefreshTokenRequest, TokenRefreshResponse,
@@ -472,13 +472,15 @@ pub async fn web_login_confirm(
let short_code = req.code.trim();
// 查找登录码(模糊匹配,因为存入的是 ASD-XXXXXX 格式)
let record: Option<(String, String, chrono::DateTime<chrono::Utc>, Option<i32>)> = sqlx::query_as(
"SELECT code, openid, expires_at, user_id FROM web_login_codes WHERE code LIKE $1",
)
.bind(format!("%{}%", short_code))
.fetch_optional(pool.get_ref())
.await
.unwrap_or(None);
let record: Option<(String, String, chrono::DateTime<chrono::Utc>, Option<i32>)> =
sqlx::query_as(
"SELECT code, openid, expires_at, user_id FROM web_login_codes WHERE code = $1",
)
.bind(short_code)
.fetch_optional(pool.get_ref())
.await
.ok()
.flatten();
let (code, openid, expires_at, existing_user_id) = match record {
Some(r) => r,