1
0
mirror of https://github.com/actix/examples synced 2025-02-02 09:39:03 +01:00

Refactor FromRequest for LoggedUser in simple-auth-server

This commit is contained in:
david-perez 2020-05-14 00:33:54 +02:00
parent 017daacbd9
commit 10f862ce94

View File

@ -1,5 +1,3 @@
use std::pin::Pin;
use actix_identity::Identity; use actix_identity::Identity;
use actix_web::{ use actix_web::{
dev::Payload, error::BlockingError, web, Error, FromRequest, HttpRequest, dev::Payload, error::BlockingError, web, Error, FromRequest, HttpRequest,
@ -7,7 +5,7 @@ use actix_web::{
}; };
use diesel::prelude::*; use diesel::prelude::*;
use diesel::PgConnection; use diesel::PgConnection;
use futures::future::Future; use futures::future::{Ready, ok, err};
use serde::Deserialize; use serde::Deserialize;
use crate::errors::ServiceError; use crate::errors::ServiceError;
@ -27,18 +25,17 @@ pub type LoggedUser = SlimUser;
impl FromRequest for LoggedUser { impl FromRequest for LoggedUser {
type Config = (); type Config = ();
type Error = Error; type Error = Error;
type Future = Pin<Box<dyn Future<Output = Result<LoggedUser, Error>>>>; type Future = Ready<Result<LoggedUser, Error>>;
fn from_request(req: &HttpRequest, pl: &mut Payload) -> Self::Future { fn from_request(req: &HttpRequest, pl: &mut Payload) -> Self::Future {
let fut = Identity::from_request(req, pl); if let Ok(identity) = Identity::from_request(req, pl).into_inner() {
if let Some(user_json) = identity.identity() {
Box::pin(async move { if let Ok(user) = serde_json::from_str(&user_json) {
if let Some(identity) = fut.await?.identity() { return ok(user);
let user: LoggedUser = serde_json::from_str(&identity)?; }
return Ok(user); }
}; }
Err(ServiceError::Unauthorized.into()) err(ServiceError::Unauthorized.into())
})
} }
} }