fix: mock_login支持X-Mock-Key请求头鉴权 + deploy自动配置随机密钥
This commit is contained in:
@@ -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) => {
|
||||
// 验证用户存在
|
||||
|
||||
Reference in New Issue
Block a user