next_web_dev/util/
token_util.rs1use jsonwebtoken::{encode, Algorithm, DecodingKey, EncodingKey, Header, Validation};
2
3use crate::security::user_info::UserInfo;
4
5pub struct TokenUtil;
6
7const SECRET_KEY: &'static [u8] = b"next-web-jwt-secret";
8
9impl TokenUtil {
10    pub fn generate_token(user_info: &UserInfo) -> String {
11        let mut header = Header::new(Algorithm::HS512);
13        header.kid = Some("daydream-key".into());
14        let token = encode(
15            &header,
16            user_info,
17            &EncodingKey::from_secret(SECRET_KEY.as_ref()),
18        )
19        .unwrap();
20        return token;
21    }
22
23    pub fn decode(token: &str) -> Result<UserInfo, jsonwebtoken::errors::Error> {
24        let mut validation = Validation::new(Algorithm::HS512);
26        validation.set_required_spec_claims(&["exp"]);
27        let token_data = jsonwebtoken::decode::<UserInfo>(
28            token,
29            &DecodingKey::from_secret(SECRET_KEY.as_ref()),
30            &validation,
31        )?;
32        Ok(token_data.claims)
33    }
34}