fix(user): nest user routes under /user and load signing keys on startup
Prefix all user routes with /user and preload active JWT signing keys from the database at boot so the key cache is never empty (NoActiveKey).
zhenyi committed
Modified lib/user/handler/routes.rs lib/user/handler/routes.rs +14 −10 View lib/user/handler/routes.rs
@@ -228,15 +228,19 @@
228228 );
229229
230230 Router::new()
231 .merge(public)
232 .merge(public_reports)
233 .merge(user_social)
234 .merge(authenticated)
235 .merge(me_protected)
236 .merge(admin_protected)
237 .layer(from_fn_with_state(svc.clone(), ratelimit::<UserService>))
238 .layer(axum::middleware::from_fn(
239 crate::handler::middleware::metrics::metrics_layer,
240 ))
231 .nest(
232 "/user",
233 Router::new()
234 .merge(public)
235 .merge(public_reports)
236 .merge(user_social)
237 .merge(authenticated)
238 .merge(me_protected)
239 .merge(admin_protected)
240 .layer(from_fn_with_state(svc.clone(), ratelimit::<UserService>))
241 .layer(axum::middleware::from_fn(
242 crate::handler::middleware::metrics::metrics_layer,
243 )),
244 )
241245 .with_state(svc)
242246}
Modified lib/webapi/services.rs lib/webapi/services.rs +6 −2 View lib/webapi/services.rs
@@ -4,7 +4,6 @@
44use auth::pow::PowService;
55use cache::redis::RedisCache;
66use config::AppConfig;
7use config::pow::PowSettings;
87use db::conn::Db;
98use email::{EmailService, EmailServiceBuilder};
109use issues::service::IssueService;
@@ -100,7 +99,12 @@
10099 Arc::new(RwLock::new(SigningKeyCache::new())),
101100 );
102101
103 let pow = PowService::new(PowSettings::default());
102 // 启动时从数据库加载活动签名密钥,否则缓存为空会导致 NoActiveKey
103 if let Err(e) = jwt.cache.write().await.load_from_db(&db.writer()).await {
104 tracing::warn!("failed to load signing keys: {e}");
105 }
106
107 let pow = PowService::new(cfg.pow.clone());
104108
105109 let auth = AuthService::new(
106110 db.clone(),