15 个不稳定版本 (3 个破坏性更新)

0.4.3 2024 年 4 月 15 日
0.4.2 2024 年 2 月 2 日
0.4.1 2023 年 12 月 23 日
0.3.3 2024 年 4 月 21 日
0.1.2 2022 年 8 月 11 日

#144 in HTTP 服务器

Download history 576/week @ 2024-04-26 318/week @ 2024-05-03 315/week @ 2024-05-10 365/week @ 2024-05-17 399/week @ 2024-05-24 416/week @ 2024-05-31 656/week @ 2024-06-07 297/week @ 2024-06-14 449/week @ 2024-06-21 217/week @ 2024-06-28 423/week @ 2024-07-05 506/week @ 2024-07-12 251/week @ 2024-07-19 106/week @ 2024-07-26 43/week @ 2024-08-02 82/week @ 2024-08-09

每月 562 次下载

MIT 许可证

22KB
340 代码行

Firebase Auth

一个简单小巧的 Rust 库,用于处理 Firebase 授权。

支持两个最受欢迎的框架:Tokio 的 Axum 和 Actix-web。

Build badge crates.io badge

注意

0.4.x 版本支持 Axum 0.7。

0.3.x 版本将继续为 Axum 0.6 提供支持和修复错误。

设置

Actix

[dependencies]
firebase-auth = { version = "<version>", features = ["actix-web"] }
actix-web = "4"

Axum

[dependencies]
firebase-auth = { version = "<version>", features = ["axum"] }
axum = "0.7"

示例

Actix

https://github.com/trchopan/firebase-auth/tree/main/examples/actix_basic.rs

use actix_web::{get, middleware::Logger, web::Data, App, HttpServer, Responder};
use firebase_auth::{FirebaseAuth, FirebaseUser};

// Use `FirebaseUser` extractor to verify the user token and decode the claims
#[get("/hello")]
async fn greet(user: FirebaseUser) -> impl Responder {
    let email = user.email.unwrap_or("empty email".to_string());
    format!("Hello {}!", email)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    // TODO: Change to your firebase project id
    let firebase_auth = FirebaseAuth::new("my-project-id").await;

    let app_data = Data::new(firebase_auth);

    HttpServer::new(move || {
        App::new()
            .wrap(Logger::default())
            .app_data(app_data.clone())
            .service(greet)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

Axum

https://github.com/trchopan/firebase-auth/tree/main/examples/axum_basic.rs

use axum::{routing::get, Router};
use firebase_auth::{FirebaseAuth, FirebaseAuthState, FirebaseUser};

async fn greet(current_user: FirebaseUser) -> String {
    let email = current_user.email.unwrap_or("empty email".to_string());
    format!("hello {}", email)
}

async fn public() -> &'static str {
    "ok"
}

#[tokio::main]
async fn main() {
    // TODO: Change to your firebase project id
    let firebase_auth = FirebaseAuth::new("my-project-id").await;

    let app = Router::new()
        .route("/hello", get(greet))
        .route("/", get(public))
        .with_state(FirebaseAuthState { firebase_auth });

    let addr = "127.0.0.1:8080";
    let listener = tokio::net::TcpListener::bind(addr).await.unwrap();

    axum::serve(listener, app).await.unwrap();
}

使用 Axum、SQLite 和 slqx 的更完整示例

examples/axum-sqlite

这是一个更贴近现实的应用程序,使用 Firebase 身份验证和 SQLite 作为数据库。

使用自定义声明

examples/actix-web-custom-claims

examples/axum-custom-claims

自定义声明通过定义 FirebaseUser 结构体提供,并使用 actix 或 axum 特性实现从请求中提取。

如何使用 Bearer 令牌调用端点

获取 Bearer 令牌

使用 Firebase SDK 获取用户令牌。

例如:getIdToken()

使用 Authorization Bearer 请求端点

使用用户的令牌进行请求。请注意,它将过期,因此如果它过期了,您将需要再次获取它。

TOKEN="<paste your token here>"

curl --header "Authorization: Bearer $TOKEN" http://127.0.0.1:8080/hello

Firebase 文档

使用第三方 JWT 库验证 ID 令牌

许可证

MIT

版权所有 (c) 2022-,Quang Tran。

依赖项

~16–29MB
~545K SLoC