Skip to content

Latest commit

 

History

History
121 lines (89 loc) · 2.59 KB

README.md

File metadata and controls

121 lines (89 loc) · 2.59 KB

firebase-js-rs

Unofficial Wasm bindings for Firebase JS SDKs written in Rust.

Get strted

Following example shows how to add email and password # to Sycamore app.

Add and initialize SDK

Install firebase-js-rs by running the following Cargo command in your project directory:

cargo add firebase-js-rs

or alternatively add the following line to your Cargo.toml:

firebase-js-rs = "0.1.1"

Then add project in the Firebase console and install JS SDKs from the CDN.

<html>
  <head>
    <script src="https://www.gstatic.com/firebasejs/9.17.1/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/9.17.1/firebase-auth-compat.js"></script>
  </head>
</html>

Initialize Firebase app and get reference to the authentication service

use sycamore::prelude::*;
use firebase_js_rs::{app::initialize_app, Config};

fn main() {
  sycamore::render(|cx| {
    view! { cx,
          // Initialize Firebase
          let firebase_app = initialize_app(Config::initialize(
            "api_key", None, None, None, None, None, None,
            ));
          // Get reference to the auth service
            let auth = app.auth();
        }
    });
}

Create new user

let result = auth.create_user_with_email_and_password(email, password).await;

# user

let result = auth.sign_in_with_email_and_password(email, password).await;

Observe authentication state

let callback = Closure::new(move |user: JsValue| {
  // Get info about user
});
auth.on_auth_state_changed(&callback);
callback.forget();

Realtime Database

Initialize

let config = Config::initialize({
  "api_key",
  None,
  None,
  Some(String::from("project_id")),
  None,
  None,
  None,
});

// Initialize Firebase
let app = initialize_app(config);

// Initialize Realtime Database
let db = app.db();

Create a new reference

let ref = db.ref(String::from("/"));

Listen for value events

let callback = Closure::new(move |snapshot: Snapshot| {
  web_sys::console::log_1(&snapshot.val());
});
r#ref.on(Event::Value, &callback);
callback.forget();

Examples

Example Description
sycamore-firebase-auth Basic Sycamore auth example
leptos-firebase-auth Email and password authentication with Leptos