sa_token_plugin_rocket/
extractor.rs1use rocket::request::{FromRequest, Request, Outcome};
6use rocket::http::Status;
7use sa_token_core::token::TokenValue;
8
9pub struct SaTokenGuard(pub TokenValue);
11
12#[rocket::async_trait]
13impl<'r> FromRequest<'r> for SaTokenGuard {
14 type Error = ();
15
16 async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
17 let token = request.local_cache(|| None::<TokenValue>);
18 if let Some(token) = token {
19 return Outcome::Success(SaTokenGuard(token.clone()));
20 }
21
22 Outcome::Error((Status::Unauthorized, ()))
23 }
24}
25
26pub struct OptionalSaTokenGuard(pub Option<TokenValue>);
28
29#[rocket::async_trait]
30impl<'r> FromRequest<'r> for OptionalSaTokenGuard {
31 type Error = ();
32
33 async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
34 let token = request.local_cache(|| None::<TokenValue>).clone();
35 Outcome::Success(OptionalSaTokenGuard(token))
36 }
37}
38
39pub struct LoginIdGuard(pub String);
41
42#[rocket::async_trait]
43impl<'r> FromRequest<'r> for LoginIdGuard {
44 type Error = ();
45
46 async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
47 let login_id = request.local_cache(|| None::<String>);
48 if let Some(login_id) = login_id {
49 return Outcome::Success(LoginIdGuard(login_id.clone()));
50 }
51
52 Outcome::Error((Status::Unauthorized, ()))
53 }
54}