Skip to main content

mycommon_utils/utils/
token_auth.rs

1use std::collections::HashMap;
2use axum::extract::Request;
3use axum::http::request::Parts;
4use reqwest::header::HeaderMap;
5
6pub const TOKEN_PREFIX: &'static str = "Bearer ";
7
8pub fn get_token(header_map:  &HeaderMap) -> String {
9    let mut token = header_map
10        .get("authorization")
11        .map(|v| v.to_str().unwrap_or_default().to_string())
12        .unwrap_or_default();
13    if token.starts_with(TOKEN_PREFIX) {
14        token = token.replace(TOKEN_PREFIX, "");
15    }
16    token
17}
18
19
20pub fn get_token_by_header_map (header_map:  &HeaderMap) -> String {
21    let token = header_map
22        .get("Access-Token")
23        .map(|v| v.to_str().unwrap_or_default().to_string())
24        .unwrap_or_default();
25    token
26}
27
28/// 获取token认证信息
29pub fn get_access_token_by_parts<B>(parts: &mut Parts) -> String {
30    let mut jwt_token = "".to_string();
31    //在头里找数据
32    if let Some(t) = parts.headers.get("Access-Token") {
33        jwt_token = t.to_str().unwrap_or(&String::from("")).trim().to_string();
34    }
35    jwt_token
36}
37
38pub fn get_access_token_by_request<B>(request: &Request<B>) -> String {
39    let mut jwt_token = "".to_string();
40    //在头里找数据
41    if let Some(t) = request.headers().get("Access-Token") {
42        jwt_token = t.to_str().unwrap_or(&String::from("")).trim().to_string();
43    }
44    jwt_token
45}
46
47// 提取请求参数的辅助函数
48pub fn get_query_params_token<B>(request: &Request<B>) -> String {
49    // 获取 URI 的查询部分
50    let query = request.uri().query().unwrap_or("");
51    // 解析查询字符串为 HashMap(这里我们直接使用 into_iter().collect() 来避免中间的 Vec)
52    let params: HashMap<String, String> = form_urlencoded::parse(query.as_bytes())
53        .into_owned()
54        .collect::<HashMap<_, _>>();
55    // 从 HashMap 中获取 token 的值,如果不存在则返回空字符串
56    params.get("token").cloned().unwrap_or_default()
57}
58
59