#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
обратную ссылку, перенаправил на нужную страницу, защитил другие страницы и сохранил его UIDredux
. Затем, чтобы извлечь данные, я бы назвал узел данных с данными пользователей в пути, используяrole
иUID
хранимый. Например, сделайтеhttp
запросDB
к путиfirebase/blabla/role/UID