rust actix 身份认证类库

rust 框架actix 提供了一个名为actix-identity的 类库,用于身份认证。

 actix_identity 
Actix Web 应用程序的自以为是的请求身份服务。

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

提供了基于 cookie 的策略。CookieIdentityPolicy使用 cookie 作为身份存储。

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



use actix_web::*;
use actix_identity::{Identity, CookieIdentityPolicy, IdentityService};

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

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

#[post("/logout")]
async fn logout(id: Identity) -> HttpResponse {
    // remove identity
    id.forget();
    HttpResponse::Ok().finish()
}

HttpServer::new(move || {
    // create cookie identity backend (inside closure, since policy is not Clone)
    let policy = CookieIdentityPolicy::new(&[0; 32])
        .name("auth-cookie")
        .secure(false);

    App::new()
        // wrap policy into middleware identity middleware
        .wrap(IdentityService::new(policy))
        .service(services![index, login, logout])
})

详细介绍

用cookie存储凭证,然后注入一个中间件,具体的controller方法,附带一个名为id的对象,对象是identity结构。

里面有方法,让你能判断,是否鉴权过了。

 

同理,在登录的时候,我们应该把身份信息写进去。

至于具体的 登录代码,判断用户身份,这里就不表述了,你自己实现吧。

你学会了吗

分类: 默认 标签: 发布于: 2022-03-18 10:45:23, 更新于: 2022-03-18 10:45:23