Skip to main content

Decoder

Struct Decoder 

Source
pub struct Decoder(/* private fields */);
Expand description

A decoder for JSON Web Tokens (JWTs).

To extract a JWT value from a request header, this decoder must be provided to the router using the with_state method.

§Examples

You can pass the decoder directly:

use {
    axum::{Router, routing},
    axum_jwt::{Claims, Decoder, jsonwebtoken::DecodingKey},
    serde::Deserialize,
};

#[derive(Deserialize)]
struct User {
    sub: String,
}

async fn hello(Claims(u): Claims<User>) -> String {
    format!("Hello, {}!", u.sub)
}

let decoder = Decoder::from_key(DecodingKey::from_secret(b"secret"));

let app = Router::new()
    .route("/", routing::get(hello))
    .with_state(decoder);

If the application needs to store additional state, you can define a custom type that contains the decoder. You’ll also need the application state to be cheap to clone, so it makes sense to wrap it in an Arc. In this case, you can provide the decoder by implementing the AsRef trait for your custom state.

struct App {
    decoder: Decoder,
    users_online: Mutex<Vec<User>>,
}

impl AsRef<Decoder> for App {
    fn as_ref(&self) -> &Decoder {
        &self.decoder
    }
}

let decoder = Decoder::from_key(DecodingKey::from_secret(b"secret"));

let app = Router::new()
    .route("/", routing::get(hello))
    .with_state(Arc::new(App {
        decoder,
        users_online: Mutex::default(),
    }));

Implementations§

Source§

impl Decoder

Source

pub fn from_key(key: DecodingKey) -> Self

Creates a decoder from the provided decoding key.

Source

pub fn new(key: DecodingKey, validation: Validation) -> Self

Creates a decoder from the provided decoding key and validation.

Source

pub fn with_keys(keys: Vec<DecodingKey>, validation: Validation) -> Option<Self>

Creates a decoder from the provided decoding keys and validation.

If the given vector is empty, this constructor will return None.

Source

pub fn keys(&self) -> &[DecodingKey]

Returns a slice of decoding keys.

Source

pub fn validation(&self) -> &Validation

Returns a reference to the validation.

Trait Implementations§

Source§

impl Clone for Decoder

Source§

fn clone(&self) -> Decoder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decoder

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<P> FromRef<P> for Decoder
where P: Deref<Target: AsRef<Self>>,

Source§

fn from_ref(p: &P) -> Self

Converts to this type from a reference to the input type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.