pub struct RequestContext<'a> {
pub token: &'a str,
pub subject: &'a str,
pub fingerprint: &'a str,
pub location: Option<&'a str>,
pub coords: Option<(f64, f64)>,
pub signature: Option<&'a str>,
pub at: Option<u64>,
}Expand description
一次请求的全部输入,字段由调用方填写。
Fields§
§token: &'a str调用方签发的 token 值。verify 中为空 ⇒ TokenUnknown。
subject: &'a str用户标识。仅 bind 使用,verify 完全忽略它:每请求校验的身份
一律取自服务端 SessionRecord(异地历史按 record.subject 聚合),
请求方提供的 subject 不可信。
因此中间件里传 subject: "" 是合法的 —— verify 不看这个字段
(bind 才要求非空)。也正因如此,绝不要把请求头里的用户标识
填进来当身份:现在它进不了判定,将来重构也未必。
fingerprint: &'a str客户端指纹(如 IP + User-Agent 的规范化拼接),登录时绑定。
location: Option<&'a str>区域标识,如 “CN-BJ”。由调用方用已有 geo 库从 IP 解析。
coords: Option<(f64, f64)>(纬度, 经度),用于「不可能旅行」判定。
signature: Option<&'a str>调用方算好的 MAC。
at: Option<u64>请求自称的时间(unix 秒,如 token 内嵌的 iat)。
Trait Implementations§
Source§impl<'a> Clone for RequestContext<'a>
impl<'a> Clone for RequestContext<'a>
Auto Trait Implementations§
impl<'a> Freeze for RequestContext<'a>
impl<'a> RefUnwindSafe for RequestContext<'a>
impl<'a> Send for RequestContext<'a>
impl<'a> Sync for RequestContext<'a>
impl<'a> Unpin for RequestContext<'a>
impl<'a> UnsafeUnpin for RequestContext<'a>
impl<'a> UnwindSafe for RequestContext<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more