cargo add dotenvy
#[actix_web::main]
async fn main() {
dotenvy::dotenv().unwrap();
...
}
- Add logic to check header before establishing connection
async fn ws_handler(request: HttpRequest, body: web::Payload, room_manager: web::Data<Arc<Mutex<RoomManager>>>) -> Result<actix_web::HttpResponse, actix_web::error::Error> {
let auth_header = request.headers().get("Authorization");
if let Some(header_value) = auth_header {
if let Ok(token) = header_value.to_str() {
let secret = env::var("SECRET_KEY").expect("JWT_SECRET must be set");
let decoding_key = DecodingKey::from_secret(secret.as_bytes());
let validation = Validation::default();
match decode::<Claims>(token, &decoding_key, &validation) {
Ok(token_data) => {
... rest of the logic
}
Err(e) => {
return Err(actix_web::error::ErrorUnauthorized("Incorrect jwt"));
}
}
}
}
return Err(actix_web::error::ErrorUnauthorized("Incorrect jwt"));
}