打通前后端联调链路

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
fish
2026-04-26 15:15:19 +08:00
parent 91226fa976
commit 83d9a08b97
8 changed files with 156 additions and 68 deletions

View File

@@ -28,18 +28,12 @@ struct LoginRequest {
password: String,
}
// 统一响应包装
// 登录/认证类接口扁平响应(与前端约定对齐)
#[derive(Serialize)]
struct ApiResponse<T> {
struct LoginResponse {
success: bool,
token: Option<String>,
message: String,
data: Option<T>,
}
// 登录业务数据
#[derive(Serialize)]
struct LoginData {
token: String,
}
// JWT Claims
@@ -98,7 +92,7 @@ async fn main() {
async fn login_handler(
State(state): State<Arc<AppState>>,
Json(payload): Json<LoginRequest>,
) -> (StatusCode, Json<ApiResponse<LoginData>>) {
) -> (StatusCode, Json<LoginResponse>) {
info!("Login attempt for user: {}", payload.username);
// 查询用户账号与密码
@@ -120,16 +114,16 @@ async fn login_handler(
match verify(&payload.password, &password_hash) {
Ok(true) => {
info!("User {} logged in successfully", payload.username);
// 生成 JWT
let token = generate_token(&user_id.to_string(), &state.jwt_secret);
(
StatusCode::OK,
Json(ApiResponse {
Json(LoginResponse {
success: true,
token: Some(token),
message: "Login successful".to_string(),
data: Some(LoginData { token }),
}),
)
}
@@ -137,10 +131,10 @@ async fn login_handler(
warn!("Invalid password for user {}", payload.username);
(
StatusCode::UNAUTHORIZED,
Json(ApiResponse {
Json(LoginResponse {
success: false,
token: None,
message: "Invalid credentials".to_string(),
data: None,
}),
)
}
@@ -148,10 +142,10 @@ async fn login_handler(
warn!("Password verification error: {:?}", e);
(
StatusCode::INTERNAL_SERVER_ERROR,
Json(ApiResponse {
Json(LoginResponse {
success: false,
token: None,
message: "Internal error".to_string(),
data: None,
}),
)
}

View File

@@ -28,18 +28,12 @@ struct LoginRequest {
password: String,
}
// 统一响应包装
// 登录/认证类接口扁平响应(与前端约定对齐)
#[derive(Serialize)]
struct ApiResponse<T> {
struct LoginResponse {
success: bool,
token: Option<String>,
message: String,
data: Option<T>,
}
// 登录业务数据
#[derive(Serialize)]
struct LoginData {
token: String,
}
// JWT Claims
@@ -98,7 +92,7 @@ async fn main() {
async fn login_handler(
State(state): State<Arc<AppState>>,
Json(payload): Json<LoginRequest>,
) -> (StatusCode, Json<ApiResponse<LoginData>>) {
) -> (StatusCode, Json<LoginResponse>) {
info!("Login attempt for email: {}", payload.email);
// 查询用户邮箱与密码
@@ -120,16 +114,16 @@ async fn login_handler(
match verify(&payload.password, &password_hash) {
Ok(true) => {
info!("Email {} logged in successfully", payload.email);
// 生成 JWT
let token = generate_token(&user_id.to_string(), &state.jwt_secret);
(
StatusCode::OK,
Json(ApiResponse {
Json(LoginResponse {
success: true,
token: Some(token),
message: "Login successful".to_string(),
data: Some(LoginData { token }),
}),
)
}
@@ -137,10 +131,10 @@ async fn login_handler(
warn!("Invalid password for email {}", payload.email);
(
StatusCode::UNAUTHORIZED,
Json(ApiResponse {
Json(LoginResponse {
success: false,
token: None,
message: "Invalid credentials".to_string(),
data: None,
}),
)
}
@@ -148,10 +142,10 @@ async fn login_handler(
warn!("Password verification error: {:?}", e);
(
StatusCode::INTERNAL_SERVER_ERROR,
Json(ApiResponse {
Json(LoginResponse {
success: false,
token: None,
message: "Internal error".to_string(),
data: None,
}),
)
}