C# 如何使用FirebaseDatabase.Net在实时数据库中创建电子邮件密钥
我想创建用户电子邮件密钥,而不是自动生成的密钥。我之所以想这样做,是为了能够查询特定的电子邮件并获取该用户数据,而不是从用户子数据中获取所有用户,这并不方便,特别是如果用户数量将增长的话 我正在使用的是一个可用的nuget。它是Firebase实时数据库REST API之上的包装器 一个新用户被添加到具有自动生成的密钥的实时数据库中,如下所示。如果这些密钥是用户电子邮件,也许我可以查询用户电子邮件并获取特定的电子邮件子数据,如下面的代码:C# 如何使用FirebaseDatabase.Net在实时数据库中创建电子邮件密钥,c#,firebase,firebase-realtime-database,xamarin.forms,C#,Firebase,Firebase Realtime Database,Xamarin.forms,我想创建用户电子邮件密钥,而不是自动生成的密钥。我之所以想这样做,是为了能够查询特定的电子邮件并获取该用户数据,而不是从用户子数据中获取所有用户,这并不方便,特别是如果用户数量将增长的话 我正在使用的是一个可用的nuget。它是Firebase实时数据库REST API之上的包装器 一个新用户被添加到具有自动生成的密钥的实时数据库中,如下所示。如果这些密钥是用户电子邮件,也许我可以查询用户电子邮件并获取特定的电子邮件子数据,如下面的代码: await firebase
await firebase
.Child("Users")
.Child("user1@email.com")
.OnceSingleAsync<User>());
我正在使用示例中的代码。下面的功能是获取所有用户、添加新用途和获取用户
public FirebaseClient firebase = new FirebaseClient("firebaseurl");
public async Task<List<User>> GetAllUsers()
{
return (await firebase
.Child("Users")
.OnceAsync<User>()).Select(item => new User
{
Firstname = item.Object.Firstname,
Lastname = item.Object.Lastname,
Username = item.Object.Username,
Email = item.Object.Email,
Password = item.Object.Password,
}).ToList();
}
public async Task<User> GetUser(string email)
{
var AllUsers = await GetAllUsers();
await firebase
.Child("Users")
.OnceAsync<User>();
return AllUsers.Where(a => a.Email == email).FirstOrDefault();
}
public async Task<bool> AddUser(User newUser)
{
try
{
await firebase
.Child("Users")
.PostAsync(newUser);
return true;
}
catch (Exception e)
{
Console.WriteLine($"Error:{e}");
return false;
}
}
请引导我创建电子邮件密钥而不是自动生成的密钥,这样我就可以使用电子邮件密钥请求特定的用户数据,而不是获取所有用户。我急切地等待答案,多次刷新页面。幸运的是我找到了一个方法 要创建电子邮件密钥,请首先替换任何字符,如.$[]在您的电子邮件字符串中,因为Firebase不支持它们。或者另一种方法是将字符串转换为字节数组,然后转换为base64。好在base64字符串字母表没有这些字符,所以使用它是安全的 然后在AddUser函数中,将base64电子邮件密钥子项放在主子项User2下。主要的孩子可以是任何名字,我会在这之后改变它。PutAsync将把新用户数据放在该电子邮件子项中 请注意,AddUser函数参数中的用户是我定义的一个类,它具有诸如firstname、lastname、email、country、phone等用户属性
public async Task<bool> AddUser(User newUser)
{
try
{
string userEmail = Convert.ToBase64String(Encoding.ASCII.GetBytes(newUser.Email));
await firebase
.Child("User2")
.Child(userEmail)
.PutAsync(newUser);
return true;
}
catch (Exception e)
{
Console.WriteLine($"Error:{e}");
return false;
}
}
成功了!在下图中,旧Users子项具有自动生成的密钥,而新User2子项具有base64电子邮件密钥。不用担心,它可以在GetUser函数中轻松获得
电子邮件ibrahim155255@gmail.com转换为base64时变为aWJyYWhpbTE1NTI1NUBnbWFpbC5jb20=
在GetUser函数中,电子邮件转换为base64的方式与AddUser函数中相同。如果User2子项中存在base64电子邮件密钥子项,则返回用户数据
public async Task<User> GetUser(string email)
{
try
{
string userEmail = Convert.ToBase64String(Encoding.ASCII.GetBytes(email));
return (await firebase
.Child("User2")
.Child(userEmail)
.OnceSingleAsync<User>());
}
catch (Exception e)
{
Console.WriteLine($"Error:{e}");
return null;
}
}
我希望这个答案是有用的。如果它对您有帮助,请竖起大拇指回答,我将非常感谢。谢谢您的分享,请不要忘记在三天后标记答案。@LeonLu MSFT听到这个消息很高兴。谢谢你让我知道如何标记它回答说,我不知道,现在我知道了。