Как создать ключ электронной почты в базе данных в реальном времени, используя FirebaseDatabase.Net - PullRequest
0 голосов
/ 18 марта 2020

Я хочу создать ключи электронной почты пользователя вместо автоматически сгенерированных ключей. Причина, по которой я хочу сделать это, состоит в том, чтобы иметь возможность запрашивать конкретную электронную почту и получать эти пользовательские данные вместо того, чтобы получать всех пользователей из дочерних данных «Пользователи», что не удобно, особенно если количество пользователей будет расти.

Я использую FirebaseDatabase. Net, который доступен как nuget. Это оболочка поверх API REST базы данных Firebase Realtime.

Новый пользователь добавляется в базу данных реального времени с автоматически сгенерированными ключами, как показано ниже. Если бы вместо этих ключей были электронные письма пользователя, возможно, я мог бы запросить электронную почту пользователя и получить конкретные дочерние данные электронной почты, как показано ниже:

         await firebase
              .Child("Users")
              .Child("user1@email.com")
              .OnceSingleAsync<User>());

enter image description here

Я использую коды из примеров. Ниже приведены функции для получения всех пользователей, добавления новых пользователей и получения пользователя.

        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;
            }
        }

Пожалуйста, помогите мне создать ключи электронной почты вместо автоматически сгенерированных ключей, чтобы я мог запросить определенные данные пользователя. используя ключ электронной почты вместо получения всех пользователей.

1 Ответ

0 голосов
/ 18 марта 2020

Я с нетерпением ждал ответа, так много раз обновляя страницу. К счастью, я нашел способ сделать это.

Чтобы создать ключ электронной почты , сначала замените любые символы на ". $ # []" в строке электронной почты, поскольку Firebase не поддержать их. Или другой способ - преобразовать строку в байтовый массив, а затем в base64. Хорошо, что строковый алфавит base64 не имеет этих символов, поэтому его можно безопасно использовать.

Base64 Alphabet

Затем в функции AddUser введите ключ электронной почты base64 дочерний под основным дочерним "User2". Главный ребенок может быть любого имени, я собираюсь изменить его после этого. PutAsyn c поместит новые пользовательские данные в этот дочерний элемент электронной почты.

Обратите внимание, что «Пользователь», как видно из параметра функции AddUser, - это определенный мной класс, имеющий свойства пользователя, такие как имя, фамилия, адрес электронной почты, страна, телефон и т. Д.

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" становится " aWJyYWhpbTE1NTI1NUBnbWFpbC5jb20 = " при преобразовании в base64.

enter image description here

В функции GetUser электронное письмо преобразуется в base64 так же, как в функции AddUser. Если дочерний ключ электронной почты base64 присутствует внутри дочернего элемента «User2», возвращаются пользовательские данные.

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;
            }
        }

Надеюсь, этот ответ полезен. Если это помогло вам, пожалуйста, ответьте, пожалуйста, я буду очень признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...