C#中基于Firebase的用户身份验证及用户数据获取咨询
在C#应用中通过邮箱密码验证Firebase用户并获取用户数据
一、客户端应用(如WPF/WinForms/.NET MAUI)
1. 安装依赖包
安装NuGet包 FirebaseAuth.NET
2. 初始化Firebase Auth
先在Firebase控制台获取你的Web API密钥,再初始化Auth实例:
using Firebase.Auth; var authProvider = new FirebaseAuthProvider(new FirebaseConfig("你的Firebase Web API密钥"));
3. 验证邮箱密码并获取用户数据
调用验证方法,成功后直接获取用户基础信息,如需自定义数据可从数据库读取:
try { // 验证邮箱密码 var authResult = await authProvider.SignInWithEmailAndPasswordAsync("user@example.com", "userpassword"); // 获取用户基础信息 var user = authResult.User; Console.WriteLine($"用户ID: {user.LocalId}"); Console.WriteLine($"邮箱: {user.Email}"); Console.WriteLine($"显示名称: {user.DisplayName}"); // 读取Realtime Database中的自定义用户数据(需安装FirebaseDatabase.NET包) var db = new FirebaseDatabase("你的Firebase数据库URL"); var userData = await db.Child("users").Child(user.LocalId).OnceSingleAsync<Dictionary<string, object>>(); if (userData != null) { Console.WriteLine("用户自定义数据:"); foreach (var item in userData) { Console.WriteLine($"{item.Key}: {item.Value}"); } } } catch (FirebaseAuthException ex) { // 处理验证失败场景(如邮箱不存在、密码错误) Console.WriteLine($"验证失败: {ex.Message}"); }
二、服务端应用(如ASP.NET Core)
服务端无法通过Admin SDK直接验证密码,需调用Firebase REST API完成验证,再用Admin SDK获取用户数据:
1. 安装依赖包
安装FirebaseAdmin和System.Net.Http.Json NuGet包
2. 初始化Firebase Admin
使用Firebase控制台下载的服务账号密钥初始化:
using FirebaseAdmin; using Google.Apis.Auth.OAuth2; FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("path/to/serviceAccountKey.json"), });
3. 调用REST API验证并获取数据
using System.Net.Http.Json; var httpClient = new HttpClient(); var requestBody = new { email = "user@example.com", password = "userpassword", returnSecureToken = true }; var response = await httpClient.PostAsJsonAsync("https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=你的Firebase Web API密钥", requestBody); if (response.IsSuccessStatusCode) { var authResponse = await response.Content.ReadFromJsonAsync<AuthResponse>(); // 通过Admin SDK获取用户详细信息 var userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(authResponse.LocalId); Console.WriteLine($"用户ID: {userRecord.Uid}"); Console.WriteLine($"邮箱: {userRecord.Email}"); Console.WriteLine($"创建时间: {userRecord.UserMetadata.CreationTimestamp}"); // 读取Realtime Database中的自定义数据 var db = FirebaseDatabase.DefaultInstance; var userData = await db.GetReference($"users/{userRecord.Uid}").GetValueAsync(); if (userData.Exists) { Console.WriteLine("用户自定义数据:"); Console.WriteLine(userData.Value.ToString()); } } else { var error = await response.Content.ReadFromJsonAsync<ErrorResponse>(); Console.WriteLine($"验证失败: {error.Error.Message}"); } // 定义所需模型类 public class AuthResponse { public string LocalId { get; set; } public string IdToken { get; set; } public bool Registered { get; set; } } public class ErrorResponse { public ErrorDetails Error { get; set; } } public class ErrorDetails { public string Message { get; set; } }
注意事项
- 确保Firebase项目已开启邮箱/密码登录方式(控制台→认证→登录方法)
- 服务端使用的服务账号密钥需具备认证和数据库访问权限(默认密钥即可)
- 客户端应用请勿硬编码API密钥,建议通过配置文件管理
内容的提问来源于stack exchange,提问作者Shah Muhammad
相关产品推荐
相关产品推荐

