1use clamber_core::Result;
2use clamber_core::token::{JwtConfig, JwtManager, generate_token, is_valid_token, verify_token};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Serialize, Deserialize, PartialEq)]
7struct User {
8 id: String,
9 username: String,
10 email: String,
11 role: String,
12}
13
14#[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 example_convenience_functions()?;
27
28 example_custom_config()?;
30
31 example_different_payloads()?;
33
34 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 let token = generate_token(&user, JwtConfig::default())?;
52 println!(" 生成的token: {}", token);
53
54 let is_valid = is_valid_token(&token);
56 println!(" Token有效性: {}", is_valid);
57
58 let decoded_user: User = verify_token(&token)?;
60 println!(" 解析出的用户: {:?}", decoded_user);
61
62 assert_eq!(user, decoded_user);
64 println!(" ✓ 数据一致性验证通过\n");
65
66 Ok(())
67}
68
69fn example_custom_config() -> Result<()> {
70 println!("2. 使用自定义配置:");
71
72 let config = JwtConfig::new("my_super_secret_key_2024", 30); 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 let token = jwt_manager.generate_token(&session_data)?;
84 println!(" 自定义配置生成的token: {}...", &token[..50]);
85
86 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 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 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 #[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 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 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}