feat: add auth

This commit is contained in:
brian
2025-06-08 22:24:44 +08:00
parent c3493cbe6f
commit e6a32eab51
3 changed files with 40 additions and 30 deletions

View File

@@ -1,22 +1,18 @@
use axum::{
extract::FromRequestParts,
http::{
request::Parts,
StatusCode,
},
Json, RequestPartsExt,
http::{request::Parts, StatusCode},
response::{IntoResponse, Response},
Json, RequestPartsExt,
};
use axum_extra::{
headers::{authorization::Bearer, Authorization},
TypedHeader,
};
use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, Validation};
use serde::{Deserialize, Serialize};
use serde_json::json;
use jsonwebtoken::{decode,encode, DecodingKey, EncodingKey, Header, Validation};
use std::fmt::Display;
use once_cell::sync::Lazy;
use crate::util;
use std::sync::OnceLock;
#[derive(Debug, Serialize, Deserialize)]
pub struct Claims {
@@ -46,10 +42,15 @@ pub enum AuthError {
InvalidToken,
}
static KEYS: Lazy<Keys> = Lazy::new(|| {
let secret = std::env::var("JWT_SECRET").expect("JWT_SECRET must be set");
Keys::new(secret.as_bytes())
});
static KEYS: OnceLock<Keys> = OnceLock::new();
pub fn initialize_jwt_key(key_str: String) {
let res = KEYS.set(Keys::new(key_str.as_bytes()));
match res {
Ok(_) => {}
Err(_) => panic!("jwt key initialize failed"),
}
}
struct Keys {
encoding: EncodingKey,
@@ -93,8 +94,12 @@ where
.await
.map_err(|_| AuthError::InvalidToken)?;
// Decode the user data
let token_data = decode::<Claims>(bearer.token(), &KEYS.decoding, &Validation::default())
.map_err(|_| AuthError::InvalidToken)?;
let token_data = decode::<Claims>(
bearer.token(),
&KEYS.get().unwrap().decoding,
&Validation::default(),
)
.map_err(|_| AuthError::InvalidToken)?;
Ok(token_data.claims)
}