Firebase Auth with Rocket, batteries included
rocket-firebase-auth
is tiny, with features allowing you to make it even tinierIf you haven't already, create a service account in Firebase for the Rocket backend
you are creating. Generate a new private key and copy-paste the generated json
into a firebase-credentials.json
file.
json
{
"type": "*********",
"project_id": "***********",
"private_key_id": "*************",
"private_key": "*****************",
"client_email": "*********",
"client_id": "*******",
"auth_uri": "********",
"token_uri": "********",
"auth_provider_x509_cert_url": "********",
"client_x509_cert_url": "********"
}
Don't forget to add the firebase-credentials.json
file to your .gitignore
.
```gitignore
firebase-credentials.json ```
FirebaseAuth
instance and add to server stateAdd rocket-firebase-auth
to your project.
toml
rocket_firebase_auth = "0.2.0"
Now, you can create a FirebaseAuth
struct by reading the json file with a helper
function included with the default import.
```rust use rocket::{Build, Rocket}; use rocketfirebaseauth::FirebaseAuth;
pub struct ServerState { pub auth: FirebaseAuth }
async fn rocket() -> Rocket
rocket::build()
.mount("/", routes![hello_world])
.manage(ServerState {
auth: firebase_auth
})
} ```
On endpoints that we except to receive Authorization headers containing our encoded
Firebase tokens from the client, we can add a field to the endpoint function.
Running the Jwt::verify()
function will decode the token, where you can get the
Firebase uid
.
```rust
async fn helloworld(
state: &State
status::Accepted(Some(format!("uid: {uid}")))
} ```
For a more detailed example with a frontend example as well, checkout the example projects .
Any contributions (PRs, Issues) are welcomed!
MIT