fix: mock_login支持X-Mock-Key请求头鉴权 + deploy自动配置随机密钥

This commit is contained in:
2026-05-25 16:27:01 +08:00
parent a9be70aabc
commit da4af50b45
2 changed files with 28 additions and 1 deletions

View File

@@ -106,6 +106,17 @@ deploy_service_file() {
fi
rsync -avzP "$(get_service_file_local)" "${REMOTE_USER}@${REMOTE_HOST}:/etc/systemd/system/${SERVICE_NAME}"
# 开发环境自动配置 mock login带随机密钥
if [ "${APP_ENV}" = "development" ]; then
local has_mock; has_mock=$(remote "grep -c 'MOCK_LOGIN_ENABLED' /etc/systemd/system/${SERVICE_NAME} 2>/dev/null || echo 0")
if [ "$has_mock" = "0" ]; then
local mock_key; mock_key=$(openssl rand -base64 12 2>/dev/null | tr -d '\n' || echo "dev-mock-$(date +%s)")
remote "sed -i '/^\[Service\]/a Environment=MOCK_LOGIN_ENABLED=true\nEnvironment=MOCK_LOGIN_KEY=${mock_key}' /etc/systemd/system/${SERVICE_NAME}"
log_info "自动配置 MOCK_LOGIN_ENABLED=true, MOCK_LOGIN_KEY=${mock_key}"
fi
fi
remote "systemctl daemon-reload"
log_info "service 文件部署完成,使用 systemctl restart ${SERVICE_NAME} 重启"
}

View File

@@ -231,18 +231,34 @@ pub struct MockLoginResponse {
/// GET /api/mock-login
/// 沙箱测试用:无需微信 code直接返回 JWT
/// 通过环境变量 MOCK_LOGIN_ENABLED 控制是否启用
/// 通过环境变量 MOCK_LOGIN_ENABLED + MOCK_LOGIN_KEY 控制启用
/// MOCK_LOGIN_ENABLED=true 且未设 MOCK_LOGIN_KEY任何请求可用不安全
/// MOCK_LOGIN_ENABLED=true 且设了 MOCK_LOGIN_KEY需携带 X-Mock-Key 请求头
#[get("/api/mock-login")]
pub async fn mock_login(
pool: web::Data<PgPool>,
query: web::Query<MockLoginRequest>,
app_state: web::Data<AppState>,
req: HttpRequest,
) -> impl Responder {
// 检查是否启用
if std::env::var("MOCK_LOGIN_ENABLED").ok() != Some("true".to_string()) {
return HttpResponse::NotFound().json(ErrorResponse::<()>::error("模拟登录未启用"));
}
// 如果设置了 MOCK_LOGIN_KEY验证请求头
if let Ok(key) = std::env::var("MOCK_LOGIN_KEY") {
if !key.is_empty() {
let header_key = req.headers()
.get("X-Mock-Key")
.and_then(|v| v.to_str().ok())
.unwrap_or("");
if header_key != key {
return HttpResponse::Forbidden().json(ErrorResponse::<()>::error("模拟登录密钥错误"));
}
}
}
let user_id = match query.user_id {
Some(id) => {
// 验证用户存在