forked from sa-tokens/sa-token-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtoken_styles_example.rs
More file actions
152 lines (134 loc) · 5.89 KB
/
Copy pathtoken_styles_example.rs
File metadata and controls
152 lines (134 loc) · 5.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Author: 金书记
//
//! Token 风格示例
//!
//! 演示所有可用的 Token 生成风格
//!
//! ## 导入方式
//!
//! ### 方式1: 独立使用核心库(本示例)
//! ```ignore
//! use sa_token_core::config::{SaTokenConfig, TokenStyle};
//! use sa_token_core::token::TokenGenerator;
//! ```
//!
//! ### 方式2: 使用 Web 框架插件(推荐)
//! ```toml
//! [dependencies]
//! sa-token-plugin-axum = "0.1.3"
//! ```
//! ```ignore
//! use sa_token_plugin_axum::*; // TokenStyle 已重新导出!
//! ```
use sa_token_core::{
config::{SaTokenConfig, TokenStyle},
token::TokenGenerator,
};
fn main() {
println!("========================================");
println!("sa-token Token 风格示例 | sa-token Token Styles Example");
println!("========================================\n");
let test_login_id = "user_12345";
// ========================================
// 1. UUID 风格 | 1. UUID Style
// ========================================
println!("1. UUID 风格 | UUID Style:");
let token = TokenGenerator::generate_with_login_id(
&SaTokenConfig { token_style: TokenStyle::Uuid, ..Default::default() },
test_login_id
);
println!(" Token: {}", token.as_str());
println!(" 长度 | Length: {} 字符 | characters\n", token.as_str().len());
// ========================================
// 2. Simple UUID 风格 | 2. Simple UUID Style
// ========================================
println!("2. Simple UUID 风格(无横杠)| Simple UUID Style (no hyphens):");
let token = TokenGenerator::generate_with_login_id(
&SaTokenConfig { token_style: TokenStyle::SimpleUuid, ..Default::default() },
test_login_id
);
println!(" Token: {}", token.as_str());
println!(" 长度 | Length: {} 字符 | characters\n", token.as_str().len());
// 3. Random32 风格
println!("3. Random32 风格:");
let token = TokenGenerator::generate_with_login_id(
&SaTokenConfig { token_style: TokenStyle::Random32, ..Default::default() },
test_login_id
);
println!(" Token: {}", token.as_str());
println!(" 长度: {} 字符\n", token.as_str().len());
// 4. Random64 风格
println!("4. Random64 风格:");
let token = TokenGenerator::generate_with_login_id(
&SaTokenConfig { token_style: TokenStyle::Random64, ..Default::default() },
test_login_id
);
println!(" Token: {}", token.as_str());
println!(" 长度: {} 字符\n", token.as_str().len());
// 5. Hash 风格(新)
println!("5. Hash 风格 (NEW - SHA256哈希):");
let config_hash = SaTokenConfig {
token_style: TokenStyle::Hash,
..Default::default()
};
let token = TokenGenerator::generate_with_login_id(&config_hash, test_login_id);
println!(" Token: {}", token.as_str());
println!(" 长度: {} 字符", token.as_str().len());
println!(" 说明: SHA256(login_id + timestamp + UUID)\n");
// 6. Timestamp 风格(新)
println!("6. Timestamp 风格 (NEW - 时间戳+随机):");
let config_timestamp = SaTokenConfig {
token_style: TokenStyle::Timestamp,
..Default::default()
};
let token = TokenGenerator::generate_with_login_id(&config_timestamp, test_login_id);
println!(" Token: {}", token.as_str());
println!(" 长度: {} 字符", token.as_str().len());
println!(" 说明: 毫秒级时间戳_16位随机字符\n");
// 7. Tik 风格(新)
println!("7. Tik 风格 (NEW - 短小精悍):");
let config_tik = SaTokenConfig {
token_style: TokenStyle::Tik,
..Default::default()
};
let token = TokenGenerator::generate_with_login_id(&config_tik, test_login_id);
println!(" Token: {}", token.as_str());
println!(" 长度: {} 字符", token.as_str().len());
println!(" 说明: 8位字母数字混合(URL安全)\n");
// 生成多个 Token 验证唯一性
println!("\n========================================");
println!("验证新 Token 风格的唯一性");
println!("========================================\n");
println!("Hash 风格 (3次生成):");
for i in 1..=3 {
let token = TokenGenerator::generate_with_login_id(&config_hash, test_login_id);
println!(" #{}: {}", i, token.as_str());
}
println!("\nTimestamp 风格 (3次生成):");
for i in 1..=3 {
let token = TokenGenerator::generate_with_login_id(&config_timestamp, test_login_id);
println!(" #{}: {}", i, token.as_str());
std::thread::sleep(std::time::Duration::from_millis(10));
}
println!("\nTik 风格 (5次生成 - 展示短小特性):");
for i in 1..=5 {
let token = TokenGenerator::generate_with_login_id(&config_tik, test_login_id);
println!(" #{}: {}", i, token.as_str());
}
println!("\n========================================");
println!("Token 风格对比");
println!("========================================\n");
println!("风格 | 长度 | 特点");
println!("-----------|---------|------------------------------------------");
println!("UUID | 36 字符 | 标准 UUID 格式,带横杠");
println!("SimpleUUID | 32 字符 | UUID 格式,无横杠");
println!("Random32 | 32 字符 | 随机十六进制字符串");
println!("Random64 | 64 字符 | 随机十六进制字符串(更长)");
println!("Hash | 64 字符 | SHA256 哈希,包含用户信息");
println!("Timestamp | ~30字符 | 包含时间信息,便于追溯");
println!("Tik | 8 字符 | 短小精悍,适合分享链接");
println!("JWT | 变长 | 包含完整信息的自包含令牌\n");
println!("========================================");
println!("✅ 所有 Token 风格演示完成!");
println!("========================================");
}