jwt_usage/
jwt_usage.rs

1use clamber_core::Result;
2use clamber_core::token::{JwtConfig, JwtManager, generate_token, is_valid_token, verify_token};
3use serde::{Deserialize, Serialize};
4
5// 定义你的用户结构体
6#[derive(Debug, Serialize, Deserialize, PartialEq)]
7struct User {
8    id: String,
9    username: String,
10    email: String,
11    role: String,
12}
13
14// 也可以是任何其他结构体
15#[derive(Debug, Serialize, Deserialize, PartialEq)]
16struct SessionData {
17    user_id: String,
18    permissions: Vec<String>,
19    login_time: i64,
20}
21
22fn main() -> Result<()> {
23    println!("=== Clamber Core JWT 使用示例 ===\n");
24
25    // 示例1:使用默认配置的便利函数
26    example_convenience_functions()?;
27
28    // 示例2:使用自定义配置
29    example_custom_config()?;
30
31    // 示例3:不同类型的payload
32    example_different_payloads()?;
33
34    // 示例4:错误处理
35    example_error_handling()?;
36
37    Ok(())
38}
39
40fn example_convenience_functions() -> Result<()> {
41    println!("1. 使用默认配置的便利函数:");
42
43    let user = User {
44        id: "user123".to_string(),
45        username: "john_doe".to_string(),
46        email: "john@example.com".to_string(),
47        role: "admin".to_string(),
48    };
49
50    // 生成token
51    let token = generate_token(&user, JwtConfig::default())?;
52    println!("   生成的token: {}", token);
53
54    // 检查token是否有效
55    let is_valid = is_valid_token(&token);
56    println!("   Token有效性: {}", is_valid);
57
58    // 验证并解析token
59    let decoded_user: User = verify_token(&token)?;
60    println!("   解析出的用户: {:?}", decoded_user);
61
62    // 验证数据一致性
63    assert_eq!(user, decoded_user);
64    println!("   ✓ 数据一致性验证通过\n");
65
66    Ok(())
67}
68
69fn example_custom_config() -> Result<()> {
70    println!("2. 使用自定义配置:");
71
72    // 创建自定义配置
73    let config = JwtConfig::new("my_super_secret_key_2024", 30); // 30天过期
74    let jwt_manager = JwtManager::new(config);
75
76    let session_data = SessionData {
77        user_id: "user456".to_string(),
78        permissions: vec!["read".to_string(), "write".to_string(), "admin".to_string()],
79        login_time: chrono::Utc::now().timestamp(),
80    };
81
82    // 使用自定义配置生成token
83    let token = jwt_manager.generate_token(&session_data)?;
84    println!("   自定义配置生成的token: {}...", &token[..50]);
85
86    // 使用同样的管理器验证token
87    let decoded_session: SessionData = jwt_manager.verify_token(&token)?;
88    println!("   解析出的会话数据: {:?}", decoded_session);
89
90    assert_eq!(session_data, decoded_session);
91    println!("   ✓ 自定义配置验证通过\n");
92
93    Ok(())
94}
95
96fn example_different_payloads() -> Result<()> {
97    println!("3. 不同类型的payload支持:");
98
99    // 字符串payload
100    let simple_data = "Hello JWT World!";
101    let token1 = generate_token(&simple_data, JwtConfig::default())?;
102    let decoded_string: String = verify_token(&token1)?;
103    println!("   字符串payload: {} -> {}", simple_data, decoded_string);
104
105    // 数字payload
106    let number_data = 42i32;
107    let token2 = generate_token(&number_data, JwtConfig::default())?;
108    let decoded_number: i32 = verify_token(&token2)?;
109    println!("   数字payload: {} -> {}", number_data, decoded_number);
110
111    // 复杂结构体
112    #[derive(Serialize, Deserialize, Debug, PartialEq)]
113    struct ComplexData {
114        name: String,
115        values: Vec<i32>,
116        metadata: std::collections::HashMap<String, String>,
117    }
118
119    let mut metadata = std::collections::HashMap::new();
120    metadata.insert("version".to_string(), "1.0".to_string());
121    metadata.insert("env".to_string(), "production".to_string());
122
123    let complex_data = ComplexData {
124        name: "test_data".to_string(),
125        values: vec![1, 2, 3, 4, 5],
126        metadata,
127    };
128
129    let token3 = generate_token(&complex_data, JwtConfig::default())?;
130    let decoded_complex: ComplexData = verify_token(&token3)?;
131    println!("   复杂结构体payload: {:?}", decoded_complex);
132
133    assert_eq!(complex_data, decoded_complex);
134    println!("   ✓ 不同类型payload验证通过\n");
135
136    Ok(())
137}
138
139fn example_error_handling() -> Result<()> {
140    println!("4. 错误处理示例:");
141
142    // 无效的token
143    let invalid_token = "invalid.jwt.token";
144    match verify_token::<User>(invalid_token) {
145        Ok(_) => println!("   意外:无效token被接受了"),
146        Err(e) => println!("   ✓ 无效token正确被拒绝: {}", e),
147    }
148
149    // 不同密钥的token
150    let config1 = JwtConfig::new("secret1", 7);
151    let config2 = JwtConfig::new("secret2", 7);
152    let manager1 = JwtManager::new(config1);
153    let manager2 = JwtManager::new(config2);
154
155    let user = User {
156        id: "test".to_string(),
157        username: "test_user".to_string(),
158        email: "test@example.com".to_string(),
159        role: "user".to_string(),
160    };
161
162    let token = manager1.generate_token(&user)?;
163    match manager2.verify_token::<User>(&token) {
164        Ok(_) => println!("   意外:不同密钥的token被接受了"),
165        Err(e) => println!("   ✓ 不同密钥的token正确被拒绝: {}", e),
166    }
167
168    println!("   ✓ 错误处理验证完成\n");
169
170    Ok(())
171}