Rust Firebase管理SDK库rs-firebase-admin-sdk的使用,集成Firebase云服务实现高效后端开发
Rust Firebase管理SDK库rs-firebase-admin-sdk的使用,集成Firebase云服务实现高效后端开发
Firebase Admin Rust SDK 使开发者能够从特权环境中访问Firebase服务。该SDK设计时考虑了可扩展性和可靠性,以实现零开销的高性能。
当前支持的功能
- GCP服务账户
- 用户和自定义身份验证管理
- Firebase模拟器集成和管理
- 使用异步公共证书缓存进行Firebase OIDC令牌和会话Cookie验证
与GCP上的Firebase交互示例
use rs_firebase_admin_sdk::{
auth::{FirebaseAuthService, UserIdentifiers},
client::ApiHttpClient,
App, credentials_provider,
};
// 从环境变量加载GCP服务账户
let gcp_service_account = credentials_provider().await.unwrap();
// 为Firebase应用创建实时(非模拟)上下文
let live_app = App::live(gcp_service_account.into()).await.unwrap();
// 创建Firebase身份验证管理客户端
let auth_admin = live_app.auth();
let user = auth_admin.get_user(
// 构建筛选条件来查找用户
UserIdentifiers::builder()
.with_email("me@email.com".into())
.build()
)
.await
.expect("Error while fetching user")
.expect("User does not exist");
println!("User id: {}", user.uid);
完整示例代码
下面是一个更完整的示例,展示如何使用rs-firebase-admin-sdk进行用户管理和身份验证:
use rs_firebase_admin_sdk::{
auth::{FirebaseAuthService, UserIdentifiers, UserToCreate},
client::ApiHttpClient,
App, credentials_provider,
};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 1. 初始化Firebase Admin SDK
let gcp_service_account = credentials_provider().await?;
let live_app = App::live(gcp_service_account.into()).await?;
let auth_admin = live_app.auth();
// 2. 创建新用户
let new_user = auth_admin.create_user(
UserToCreate::builder()
.email("newuser@example.com".into())
.password("securePassword123".into())
.display_name("New User".into())
.build()
).await?;
println!("Created new user with UID: {}", new_user.uid);
// 3. 获取用户信息
let user = auth_admin.get_user(
UserIdentifiers::builder()
.with_uid(new_user.uid.clone())
.build()
)
.await?
.expect("User should exist");
println!("User email: {}", user.email.unwrap_or_default());
println!("User display name: {}", user.display_name.unwrap_or_default());
// 4. 更新用户信息
auth_admin.update_user(
new_user.uid.clone(),
UserToCreate::builder()
.display_name("Updated Name".into())
.build()
).await?;
// 5. 删除用户
auth_admin.delete_user(new_user.uid).await?;
println!("User deleted successfully");
Ok(())
}
更完整的示例代码
以下是一个扩展的完整示例,包含更多Firebase管理操作:
use rs_firebase_admin_sdk::{
auth::{FirebaseAuthService, UserIdentifiers, UserToCreate, UserToUpdate},
client::ApiHttpClient,
App, credentials_provider,
};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 1. 初始化Firebase应用
let credentials = credentials_provider().await?;
let app = App::live(credentials.into()).await?;
let auth = app.auth();
// 2. 批量创建测试用户
for i in 1..=3 {
let email = format!("user{}@example.com", i);
let user = auth.create_user(
UserToCreate::builder()
.email(email.into())
.password("password123".into())
.display_name(format!("Test User {}", i).into())
.build()
).await?;
println!("Created user: {}", user.uid);
}
// 3. 列出所有用户
println!("\nListing all users:");
let users = auth.list_users().await?;
for user in users {
println!("UID: {}, Email: {}",
user.uid,
user.email.unwrap_or_default()
);
}
// 4. 批量更新用户
println!("\nUpdating users:");
let users = auth.list_users().await?;
for user in users {
let updated_user = auth.update_user(
user.uid.clone(),
UserToUpdate::builder()
.display_name("Updated User".into())
.build()
).await?;
println!("Updated user: {}", updated_user.uid);
}
// 5. 批量删除用户
println!("\nDeleting users:");
let users = auth.list_users().await?;
for user in users {
auth.delete_user(user.uid).await?;
println!("Deleted user: {}", user.uid);
}
Ok(())
}
安装
在项目目录中运行以下Cargo命令:
cargo add rs-firebase-admin-sdk
或者在Cargo.toml中添加以下行:
rs-firebase-admin-sdk = "2.4.0"
许可证
MIT许可证
1 回复
Rust Firebase管理SDK库rs-firebase-admin-sdk使用指南
rs-firebase-admin-sdk
是一个Rust库,用于与Firebase管理API交互,使开发者能够在Rust后端应用中集成Firebase服务。
主要功能
- Firebase认证管理
- 实时数据库操作
- Firestore文档管理
- 用户管理
- 自定义令牌生成
安装方法
在Cargo.toml
中添加依赖:
[dependencies]
rs-firebase-admin-sdk = "0.1"
tokio = { version = "1.0", features = ["full"] }
基本使用方法
1. 初始化SDK
use rs_firebase_admin_sdk::{credentials::Credentials, App};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 从JSON文件加载凭证
let creds = Credentials::from_file("path/to/serviceAccountKey.json")?;
// 创建Firebase应用实例
let app = App::initialize(creds)?;
Ok(())
}
2. 用户管理示例
use rs_firebase_admin_sdk::{auth::UserManager, user::UserRecord};
async fn create_user(app: &App) -> Result<UserRecord, Box<dyn std::error::Error>> {
let user_manager = UserManager::new(app);
let user = user_manager.create_user()
.email("user@example.com")
.password("securePassword123")
.display_name("John Doe")
.await?;
println!("Created user: {:?}", user.uid);
Ok(user)
}
3. Firestore操作示例
use rs_f极store_admin_sdk::firestore::{Firestore, Document};
async fn add_to_firestore(app: &App) -> Result<(), Box<dyn std::error::Error>> {
let firestore = Firestore::new(app);
let doc: Document = firestore.collection("users")
.document("user123")
.set_data(serde_json::json!({
"name": "John",
"age": 30,
"email": "john@example.com"
}))
.await?;
println!("Document created: {:?}", doc);
Ok(())
}
4. 实时数据库操作示例
use rs_firebase_admin_sdk::realtime_database::Database;
async fn write_to_database(app: &App) -> Result<(), Box<dyn std::error::Error>> {
let database = Database::new(app);
database.reference("users/user123")
.set(serde_json::json!({
"name": "Jane",
"age": 25
}))
.await?;
Ok(())
}
5. 生成自定义令牌
use rs_firebase_admin_sdk::auth::Auth;
async fn generate_token(app: &App) -> Result<String, Box<dyn std::error::Error>> {
let auth = Auth::new(app);
let token = auth.create_custom_token("user123", None).await?;
println!("Generated token: {}", token);
Ok(token)
}
高级用法
批量操作
use rs_firebase_admin_sdk::firestore::Firestore;
async fn batch_write(app: &App) -> Result<(), Box<dyn std::error::Error>> {
let firestore = Firestore::new(app);
let batch = firestore.batch();
batch.set(
firestore.collection("users").document("user1"),
serde_json::json!({"name": "Alice"})
);
batch.set(
firestore.collection("users").document("user2"),
serde_json::json!({"name": "Bob"})
);
batch.commit().await?;
Ok(())
}
监听实时数据库变化
use rs_firebase_admin_sdk::realtime_database::Database;
use futures::StreamExt;
async fn listen_changes(app: &App) -> Result<(), Box<dyn std::error::Error>> {
let database = Database::new(app);
let mut stream = database.reference("messages").listen();
while let Some(event) = stream.next().await {
println!("Database change: {:?}", event);
}
Ok(())
}
错误处理
use rs_firebase_admin_sdk::errors::FirebaseError;
async fn handle_errors(app: &App) {
match create_user(app).await {
Ok(user) => println!("User created: {}", user.uid),
Err(FirebaseError::AuthError(e)) => eprintln!("Authentication error: {}", e),
Err(FirebaseError::DatabaseError(e)) => eprintln!("Database error: {}", e),
Err(e) => eprintln!("Other error: {}", e),
}
}
注意事项
- 确保服务账号JSON文件安全,不要提交到版本控制
- 生产环境中应考虑使用环境变量存储凭证
- 异步操作需要使用
tokio
运行时 - 大量操作时考虑使用批量写入提高性能
这个SDK为Rust开发者提供了完整的Firebase管理功能,可以轻松构建高效的后端服务。
完整示例代码
以下是一个完整的Firebase管理示例,整合了用户管理、Firestore操作和实时数据库功能:
use rs_firebase_admin_sdk::{
credentials::Credentials,
App,
auth::{UserManager, Auth},
firestore::Firestore,
realtime_database::Database,
user::UserRecord
};
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 初始化SDK
let creds = Credentials::from_file("serviceAccountKey.json")?;
let app = App::initialize(creds)?;
// 2. 用户管理 - 创建用户
let user = create_user(&app).await?;
// 3. 生成自定义令牌
let token = generate_token(&app, &user.uid).await?;
println!("Generated token for {}: {}", user.uid, token);
// 4. Firestore操作 - 添加用户数据
add_to_firestore(&app, &user.uid).await?;
// 5. 实时数据库操作 - 写入用户数据
write_to_database(&app, &user.uid).await?;
Ok(())
}
async fn create_user(app: &App) -> Result<UserRecord, Box<dyn std::error::Error>> {
let user_manager = UserManager::new(app);
let user = user_manager.create_user()
.email("user@example.com")
.password("securePassword123")
.display_name("Example User")
.await?;
println!("Created user with UID: {}", user.uid);
Ok(user)
}
async fn generate_token(app: &App, uid: &str) -> Result<String, Box<dyn std::error::Error>> {
let auth = Auth::new(app);
let token = auth.create_custom_token(uid, None).await?;
Ok(token)
}
async fn add_to_firestore(app: &App, uid: &str) -> Result<(), Box<dyn std::error::Error>> {
let firestore = Firestore::new(app);
firestore.collection("users")
.document(uid)
.set_data(json!({
"name": "Example User",
"email": "user@example.com",
"createdAt": chrono::Utc::now().to_rfc3339()
}))
.await?;
println!("Added user data to Firestore");
Ok(())
}
async fn write_to_database(app: &App, uid: &str) -> Result<(), Box<dyn std::error::Error>> {
let database = Database::new(app);
database.reference(format!("users/{}", uid))
.set(json!({
"name": "Example User",
"lastLogin": chrono::Utc::now().to_rfc3339()
}))
.await?;
println!("Wrote user data to Realtime Database");
Ok(())
}
这个完整示例展示了如何:
- 初始化Firebase Admin SDK
- 创建新用户
- 为该用户生成自定义令牌
- 将用户数据写入Firestore
- 将用户数据写入实时数据库
要运行此代码,请确保:
- 已安装Rust和Cargo
- 在项目目录下放置有效的serviceAccountKey.json
- 在Cargo.toml中添加了正确的依赖项