可以正常使用get_weather_details获取前端指定的数据了

This commit is contained in:
2025-09-29 11:20:21 +08:00
parent 8cc75be7cd
commit 56844a537f
6 changed files with 212 additions and 146 deletions

View File

@@ -1,7 +1,7 @@
use chrono::Utc;
use jsonwebtoken::{Algorithm, DecodingKey, EncodingKey, Header, Validation, decode, encode};
use crate::models::Claims;
use crate::models::{Claims, TempTokenClaims};
use actix_web::{
Error, HttpMessage, body::MessageBody, dev::ServiceRequest, dev::ServiceResponse,
middleware::Next,
@@ -79,3 +79,42 @@ pub fn verify_token(token: &str, secret: &str) -> Result<Claims, String> {
Ok(decoded.claims)
}
// 生成临时token包含openid和resource_id短期有效
pub fn generate_temp_token(
openid: &str,
resource_id: i32,
secret: &str,
expire_minutes: i64, // 有效期(分钟)
) -> Result<String, String> {
let now = Utc::now();
let exp = (now + chrono::Duration::minutes(expire_minutes)).timestamp();
let iat = now.timestamp();
let claims = TempTokenClaims {
exp,
iat,
openid: openid.to_string(),
resource_id,
};
encode(
&Header::new(Algorithm::HS256),
&claims,
&EncodingKey::from_secret(secret.as_bytes()),
)
.map_err(|e| format!("生成临时token失败: {}", e))
}
// 验证临时token并返回载荷
pub fn verify_temp_token(token: &str, secret: &str) -> Result<TempTokenClaims, String> {
let validation = Validation::new(Algorithm::HS256);
let decoded = decode::<TempTokenClaims>(
token,
&DecodingKey::from_secret(secret.as_bytes()),
&validation,
)
.map_err(|e| format!("临时token验证失败: {}", e))?;
Ok(decoded.claims)
}