Rust Web Rokcet 系列 3 使用 JWT
原文地址: https://www.ftls.xyz/posts/rust-rocket3/
作者: 恐咖兵糖
系列地址: https://www.ftls.xyz/series/rust-web-rokcet
JWT即使用的包是jsonwebtoken。是使用token进行验证的一种方式。基于token
的认证方式相比传统的session
认证方式相比节约服务器资源。 JWT 官网 https://jwt.io/ 。
本次使用的包是jsonwebtoken。代码基于本系列第二篇文章 ,系列地址 https://www.ftls.xyz/series/rust-web-rokcet/
依赖
Cargo.toml 增加依赖
jsonwebtoken = "8.0.1"
代码
src\module.rs 增加代码:
#[derive(Deserialize, Serialize)]
#[serde(crate = "rocket::serde")]
pub struct Claims {
pub sub: String,
pub exp: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(crate = "rocket::serde")]
pub struct UserAuth {
pub id: i32,
pub key: String,
}
增加 src\auth.rs
use crate::module::Claims;
use jsonwebtoken::{
decode, DecodingKey, Validation};
use rocket::http::Status;
use rocket::request::{
FromRequest, Outcome};
pub const KEY: &[u8] = b"secret";
pub struct Token;
// Bearer Token
impl Token {
fn from_request(header: &str) -> Option<Token> {
let split_vec = header.split_whitespace().collect::<Vec<_>>();
if split_vec.len() !=