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