firebase-user

Crates.iofirebase-user
lib.rsfirebase-user
version0.2.0
sourcesrc
created_at2022-11-04 20:55:14.998392
updated_at2022-11-04 20:55:14.998392
descriptionFirebase authentication for rust.
homepage
repositoryhttps://github.com/bob22z/firebase-user
max_upload_size
id705449
size81,447
(bob22z)

documentation

https://docs.rs/firebase-user

README

Fire Auth

Rust wrapper for Firebase Authentication REST API

WTFPL WTFPL

Installation

Add the following to Cargo.toml:

firebase-user = "0.2"

How to use

First you need to get a web API_KEY from firebase project settings.

let api_key: String = String::from("s6FqaFcRFd...njhB8cCjN7");

let auth = firebase_user::FireAuth::new(API_KEY);

Features

  1. Sign Up (email)
  2. Sign In (email)
  3. Send OOB Code
  4. Refresh ID Token
  5. Get User Information
  6. Update Email and Password

Don't see what you need? See below for unsupported features for now.


1. Sign Up (email)

let email = "something@email.com";
let password = "supersecret";
let return_secure_token = true;

match auth.sign_up_email(email, password, return_secure_token).await {
    Ok(response) => ...,
    Err(error) => ...,
}

// response structure
pub struct firebase_user::api::SignUpResponse {
    pub id_token: String,
    pub email: String,
    pub refresh_token: String,
    pub expires_in: String,
    pub local_id: String,
}

2. Sign In (email)

match auth.sign_in_email(email, password, return_secure_token).await {
    Ok(response) => ...,
    Err(error) => ...,
}

// response structure
pub struct firebase_user::api::SignInResponse {
    pub kind: String,
    pub local_id: String,
    pub email: String,
    pub display_name: String,
    pub id_token: String,
    pub registered: bool,
    pub refresh_token: Option<String>,
    pub expires_in: Option<String>,
}

3. Send OOB Code

Send verification email

match auth.verify_email(id_token).await {
    Ok(send_oob_code) => ...
    Err(error) => ...
}

// response structure
pub struct firebase_user::api::SendOobCode {
    pub kind: String,
    pub email: String,
}

Send reset password

match auth.reset_password(email).await {
    Ok(send_oob_code) => ...
    Err(error) => ...
}

4. Refresh ID Token

match auth.refresh_id_token(refresh_token).await {
    Ok(refresh_id_token_response) => ...
    Err(error) => ...
}

// response structure
pub struct firebase_user::api::RefreshIdToken {
    pub access_token: String,
    pub expires_in: String,
    pub token_type: String,
    pub refresh_token: String,
    pub id_token: String,
    pub user_id: String,
    pub project_id: String,
}

5. Get User Information

match auth.get_user_info(id_token).await {
    Ok(user) => ...,
    Err(error) => ...,
}

// response structure
pub struct firebase_user::api::User {
    pub local_id: String,
    pub email: String,
    pub password_hash: String,
    pub email_verified: bool,
    pub password_updated_at: u64,
    pub provider_user_info: Vec<ProviderUserInfo>,
    pub valid_since: String,
    pub last_login_at: String,
    pub created_at: String,
    pub last_refresh_at: String,
}

pub struct firebase_user::api::ProviderUserInfo {
    pub provider_id: String,
    pub federated_id: String,
    pub email: String,
    pub raw_id: String,
}

6. Update Email and Password

Email

match auth.change_email(id_token, email, return_secure_token).await {
    Ok(update_user) => ...
    Err(error) => ...
}

// response structure
pub struct firebase_user::api::UpdateUser {
    pub kind: String,
    pub local_id: String,
    pub email: String,
    pub provider_user_info: Vec<ProviderUserInfo>,
    pub password_hash: String,
    pub email_verified: bool,
    pub id_token: Option<String>,
    pub refresh_token: Option<String>,
    pub expires_in: Option<String>,
}

pub struct firebase_user::api::ProviderUserInfo {
    pub provider_id: String,
    pub federated_id: String,
    pub email: String,
    pub raw_id: String,
}

Password

match auth.change_password(id_token, password, return_secure_token).await {
    Ok(update_user) => ...
    Err(error) => ...
}

What are not supported yet

Sign In

  • Sign in anonymously
  • Sign in with OAuth credential

Password

  • Verify password reset code
  • Confirm password reset

User

  • Update profile
  • Delete account
Commit count: 41

cargo fmt