use jsonwebtoken::{decode, Algorithm, DecodingKey, Validation}; use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] pub struct GoTrueJWTClaims { // JWT standard claims pub aud: Option, pub exp: Option, pub jti: Option, pub iat: Option, pub iss: Option, pub nbf: Option, pub sub: Option, pub email: String, pub phone: String, pub app_metadata: serde_json::Value, pub user_metadata: serde_json::Value, pub role: String, pub aal: Option, pub amr: Option>, pub session_id: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct Amr { pub method: String, pub timestamp: u64, pub provider: Option, } lazy_static::lazy_static! { pub static ref VALIDATION: Validation = Validation::new(Algorithm::HS256); } impl GoTrueJWTClaims { pub fn verify(token: &str, secret: &[u8]) -> Result { Ok(decode(token, &DecodingKey::from_secret(secret), &VALIDATION)?.claims) } }