Crates.io | firebase-auth |
lib.rs | firebase-auth |
version | 0.3.3 |
source | src |
created_at | 2022-08-11 04:41:48.857168 |
updated_at | 2024-04-21 03:29:31.469376 |
description | Firebase authentication extractor for Actix Web and Axum |
homepage | https://github.com/trchopan/firebase-auth |
repository | https://github.com/trchopan/firebase-auth.git |
max_upload_size | |
id | 643125 |
size | 96,323 |
A simple and small Rust library for handling Firebase Authorization.
Supports the two most popular frameworks: Tokio's Axum and Actix-web.
Actix
[dependencies]
firebase-auth = { version = "<version>", features = ["actix"] }
actix-web = "4"
Axum
[dependencies]
firebase-auth = { version = "<version>", features = ["axum"] }
axum = "0.6"
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<()> {
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
}
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() {
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".parse().expect("Cannot parse the addr");
axum::Server::bind(addr)
.serve(app.into_make_service())
.await
.unwrap()
}
This is more real world application with Firebase Authentication and SQLite as database.
Use firebase sdk to get the User Token.
For example: getIdToken()
Make the request using the User's token. Note that it will expire so you will need to get it again if expired.
TOKEN="<paste your token here>"
curl --header "Authorization: Bearer $TOKEN" http://127.0.0.1:8080/hello
Copyright (c) 2022-, Quang Tran.