Как перенаправить и разрешить определенную страницу в соответствии с UID пользователя, используя firebase и React?

#javascript #reactjs #firebase-authentication

# #javascript #reactjs #firebase-аутентификация

Вопрос:

У меня есть страница входа в систему, и я использую react и firebase .

Я могу авторизовать пользователя с помощью электронной почты и пароля.

Я знаю, что могу сохранить UID пользователя где-нибудь в своем state управлении, чтобы разрешить ему получать доступ к страницам и т.д.

Дело в том, что у меня есть 3 типа пользователей, которых я хочу аутентифицировать:

  • Поставщики
  • Администратор
  • Гость

После аутентификации я хочу использовать React's routing для перенаправления пользователя на другой path в зависимости от типа пользователя, используя <Redirect to="path"/> , например:

Если зарегистрированный пользователь является поставщиком => <Redirect to="vendor"/>

Если зарегистрированный пользователь является гостем => <Redirect to="guest"/>

Если зарегистрированный пользователь является администратором => <Redirect to="admin"/>

На Firebase у меня есть только список аутентифицированных пользователей на странице пользователей моего проекта с их паролем, электронной почтой и UID . Я не понял, как у меня может быть другой вид информации, где я мог бы различать тип пользователя, не определять, к какому nodes из DB них он имеет доступ, а к какой странице, какой тип profile у него будет.

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

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

Еще одна вещь, о которой я подумал, заключалась в том, чтобы создать node в моем DB хранилище an object с каждым UID типом профиля и после аутентификации извлекать с UID помощью аутентифицированного пользователя, чтобы получить тип пользователя по http запросу, но я не уверен, безопасно ли это или правильно, например:

 users: {
   "someUID": "vendor",
   "someOtherUID": "guest",
   "someOoootherUID": "admin"
}
 

Заранее спасибо за вашу помощь.

В случае запроса дополнительной информации я отредактирую этот пост.

Комментарии:

1. Да, вам нужно хранить роли пользователей в базе данных, но не с такой структурой, вы можете проверить учебные пособия Робина об этом: robinwieruch.de/complete-firebase-authentication-react-tutorial

2. Я обновил его учебник, чтобы использовать функциональные компоненты вместо компонентов класса, вы можете проверить это здесь, но мне все еще нужно завершить авторизацию на основе ролей: github.com/abdelp/react-firebase-authentication

3. Лучше, если узлы в вашей БД содержат только одну конкретную информацию о пользователе каждый

4. Этот узел под названием «пользователи» будет просто проверять по UID, какой пользователь входит в систему. Затем я бы получил role обратную ссылку, перенаправил на нужную страницу, защитил другие страницы и сохранил его UID redux . Затем, чтобы извлечь данные, я бы назвал узел данных с данными пользователей в пути, используя role и UID хранимый. Например, сделайте http запрос DB к пути firebase/blabla/role/UID