32 lines
716 B
Rust
32 lines
716 B
Rust
|
use axum::{
|
||
|
extract::{FromRequestParts, Query},
|
||
|
http::{request::Parts, StatusCode},
|
||
|
RequestPartsExt,
|
||
|
};
|
||
|
use serde::Deserialize;
|
||
|
|
||
|
use crate::AppState;
|
||
|
|
||
|
#[derive(Deserialize, Debug)]
|
||
|
pub struct Claims {
|
||
|
pub user_id: i32,
|
||
|
}
|
||
|
|
||
|
#[axum::async_trait]
|
||
|
impl FromRequestParts<AppState> for Claims {
|
||
|
type Rejection = StatusCode;
|
||
|
|
||
|
async fn from_request_parts(
|
||
|
parts: &mut Parts,
|
||
|
_state: &AppState,
|
||
|
) -> Result<Self, Self::Rejection> {
|
||
|
match parts.extract().await {
|
||
|
Ok(Query(claims)) => Ok(claims),
|
||
|
Err(err) => {
|
||
|
tracing::debug!(%err, "Autharization failed");
|
||
|
Err(StatusCode::UNAUTHORIZED)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|