Added Json Web Tokens
Also down migration for users
This commit is contained in:
37
backend/src/cookie/jwt.rs
Normal file
37
backend/src/cookie/jwt.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use axum::{Json, http::StatusCode};
|
||||
use jsonwebtoken::{DecodingKey, EncodingKey, Header, Validation, decode, encode};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::models::Claims;
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct Error {
|
||||
pub status: &'static str,
|
||||
pub message: String,
|
||||
}
|
||||
|
||||
pub fn encode_token(header: &Header, id: String, key: &EncodingKey) -> String {
|
||||
let now = chrono::Utc::now();
|
||||
let issued = now.timestamp() as usize;
|
||||
let expires = (now + chrono::Duration::minutes(90)).timestamp() as usize;
|
||||
let claims: Claims = Claims {
|
||||
subject: id,
|
||||
issued: issued,
|
||||
expires: expires,
|
||||
};
|
||||
let token = encode(header, &claims, key);
|
||||
return token.expect("token return failed");
|
||||
}
|
||||
|
||||
pub fn decode_token(token: String, key: &DecodingKey) -> Result<Claims, (StatusCode, Json<Error>)> {
|
||||
let claims = decode::<Claims>(&token, key, &Validation::default())
|
||||
.map_err(|_| {
|
||||
let error = Error {
|
||||
status: "error",
|
||||
message: "Invalid Token".to_string(),
|
||||
};
|
||||
(StatusCode::UNAUTHORIZED, Json(error))
|
||||
})?
|
||||
.claims;
|
||||
return Ok(claims);
|
||||
}
|
||||
Reference in New Issue
Block a user