#web-framework #web #框架 #async #future #http

scrappy-identity

Scrappy 网页框架的认证服务

1 个不稳定版本

0.0.1 2020年1月19日

#209#futures

MIT 许可协议

1.5MB
32K SLoC

请求 Scrappy 应用程序的认证服务。

IdentityService 中间件可以与不同的策略类型一起使用以存储身份信息。

默认情况下,只实现了 Cookie 身份策略。其他后端实现可以单独添加。

CookieIdentityPolicy 使用 Cookie 作为身份存储。

要访问当前请求的身份,应使用 Identity 提取器。

use scrappy::*;
use scrappy_identity::{Identity, CookieIdentityPolicy, IdentityService};

async fn index(id: Identity) -> String {
    // access request identity
    if let Some(id) = id.identity() {
        format!("Welcome! {}", id)
    } else {
        "Welcome Anonymous!".to_owned()
    }
}

async fn login(id: Identity) -> HttpResponse {
    id.remember("User1".to_owned()); // <- remember identity
    HttpResponse::Ok().finish()
}

async fn logout(id: Identity) -> HttpResponse {
    id.forget();                      // <- remove identity
    HttpResponse::Ok().finish()
}

fn main() {
    let app = App::new().wrap(IdentityService::new(
        // <- create identity middleware
        CookieIdentityPolicy::new(&[0; 32])    // <- create cookie identity policy
              .name("auth-cookie")
              .secure(false)))
        .service(web::resource("/index.html").to(index))
        .service(web::resource("/login.html").to(login))
        .service(web::resource("/logout.html").to(logout));
}

依赖项

~34MB
~775K SLoC