sa_token_plugin_ntex/
extractor.rs

1use ntex::web::HttpRequest;
2use sa_token_core::token::TokenValue;
3
4/// 中文: 必填 Token 提取器,从请求扩展读取 Token,若不存在返回 None
5/// English: Required token extractor, reads token from request extensions, returns None when missing
6#[derive(Clone)]
7pub struct SaTokenExtractor(pub Option<TokenValue>);
8
9impl SaTokenExtractor {
10    /// 中文: 中间件会在扩展中写入 TokenValue,这里负责取出
11    /// English: Middleware stores TokenValue in extensions; this method retrieves it
12    pub fn from_request(req: &HttpRequest) -> Self {
13        let token = req.extensions().get::<TokenValue>().cloned();
14        SaTokenExtractor(token)
15    }
16}
17
18/// 中文: 可选 Token 提取器,用于无需强制登录的路由
19/// English: Optional token extractor for routes where login is not required
20#[derive(Clone)]
21pub struct OptionalSaTokenExtractor(pub Option<TokenValue>);
22
23impl OptionalSaTokenExtractor {
24    /// 中文: 读取扩展中的 TokenValue,可能为 None
25    /// English: Reads TokenValue from extensions, possibly None
26    pub fn from_request(req: &HttpRequest) -> Self {
27        let token = req.extensions().get::<TokenValue>().cloned();
28        OptionalSaTokenExtractor(token)
29    }
30}
31
32/// 中文: 登录 ID 提取器,映射为 Option<String>
33/// English: Login ID extractor returning Option<String>
34#[derive(Clone)]
35pub struct LoginIdExtractor(pub Option<String>);
36
37impl LoginIdExtractor {
38    /// 中文: 若中间件已经写入 login_id,则返回 Some;否则 None
39    /// English: Returns Some when middleware stored login_id; otherwise None
40    pub fn from_request(req: &HttpRequest) -> Self {
41        let id = req.extensions().get::<String>().cloned();
42        LoginIdExtractor(id)
43    }
44}
45