sa_token_core/token/
generator.rs

1// Author: 金书记
2//
3//! Token 生成器
4
5use uuid::Uuid;
6use crate::config::{TokenStyle, SaTokenConfig};
7use crate::token::TokenValue;
8
9pub struct TokenGenerator;
10
11impl TokenGenerator {
12    /// 根据配置生成 token
13    pub fn generate(config: &SaTokenConfig) -> TokenValue {
14        match config.token_style {
15            TokenStyle::Uuid => Self::generate_uuid(),
16            TokenStyle::SimpleUuid => Self::generate_simple_uuid(),
17            TokenStyle::Random32 => Self::generate_random(32),
18            TokenStyle::Random64 => Self::generate_random(64),
19            TokenStyle::Random128 => Self::generate_random(128),
20        }
21    }
22    
23    /// 生成 UUID 风格的 token
24    pub fn generate_uuid() -> TokenValue {
25        TokenValue::new(Uuid::new_v4().to_string())
26    }
27    
28    /// 生成简化的 UUID(去掉横杠)
29    pub fn generate_simple_uuid() -> TokenValue {
30        TokenValue::new(Uuid::new_v4().simple().to_string())
31    }
32    
33    /// 生成随机字符串
34    pub fn generate_random(length: usize) -> TokenValue {
35        use sha2::{Sha256, Digest};
36        let uuid = Uuid::new_v4();
37        let random_bytes = uuid.as_bytes();
38        let hash = Sha256::digest(random_bytes);
39        let hex_string = hex::encode(hash);
40        TokenValue::new(hex_string[..length.min(hex_string.len())].to_string())
41    }
42}
43
44// 添加 hex 依赖