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 |
|
#144 in HTTP 服务器
每月 562 次下载
22KB
340 代码行
Firebase Auth
一个简单小巧的 Rust 库,用于处理 Firebase 授权。
支持两个最受欢迎的框架:Tokio 的 Axum 和 Actix-web。
注意
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 的更完整示例
这是一个更贴近现实的应用程序,使用 Firebase 身份验证和 SQLite 作为数据库。
使用自定义声明
examples/actix-web-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 文档
许可证
版权所有 (c) 2022-,Quang Tran。
依赖项
~16–29MB
~545K SLoC