sa_token_core/context/
mod.rs1use std::sync::Arc;
9use std::cell::RefCell;
10use crate::token::{TokenInfo, TokenValue};
11
12thread_local! {
13 static CONTEXT: RefCell<Option<SaTokenContext>> = RefCell::new(None);
14}
15
16#[derive(Debug, Clone)]
18pub struct SaTokenContext {
19 pub token: Option<TokenValue>,
21
22 pub token_info: Option<Arc<TokenInfo>>,
24
25 pub login_id: Option<String>,
27}
28
29impl SaTokenContext {
30 pub fn new() -> Self {
31 Self {
32 token: None,
33 token_info: None,
34 login_id: None,
35 }
36 }
37
38 pub fn set_current(ctx: SaTokenContext) {
40 CONTEXT.with(|c| {
41 *c.borrow_mut() = Some(ctx);
42 });
43 }
44
45 pub fn get_current() -> Option<SaTokenContext> {
47 CONTEXT.with(|c| {
48 c.borrow().clone()
49 })
50 }
51
52 pub fn clear() {
54 CONTEXT.with(|c| {
55 *c.borrow_mut() = None;
56 });
57 }
58}
59
60impl Default for SaTokenContext {
61 fn default() -> Self {
62 Self::new()
63 }
64}