可以正常使用get_weather_details获取前端指定的数据了
This commit is contained in:
41
src/auth.rs
41
src/auth.rs
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user