# #javascript #firebase #google-cloud-firestore #nuxt.js #middleware
Вопрос:
здесь нужен совет.
В моем веб-приложении Nuxt amp; Firebase / Firestore будет 3 разных типа пользователей:
- субподрядчик
- подрядчик
- рабочий
Во-первых, я хочу, чтобы мои пользователи при каждом входе в систему заходили на страницу, связанную с их типом пользователя. например: запрос входа субподрядчика в / subjector, запрос входа подрядчика в / contractor и т. Д. И т. Д.
Я также хочу, чтобы пользователь мог видеть только страницы, связанные с их типами. (пользователь A видит только / A amp; / Atwo, пользователь B может видеть только /B amp; / Btwo, пользователь C может видеть только / C amp; / Ctwo и т. Д. И т. Д.)
Я хочу избегать использования облачных функций, если могу, насколько я понимаю, вы не можете развернуть свое приложение в бесплатном плане, если в вашем приложении есть облачные функции.
В любом случае, ниже правильный способ сделать это?
- Создайте в firestore документ пользователей, содержащий сведения о типе пользователя, например: «Тип пользователя: субподрядчик»
- В промежуточном программном обеспечении выполните логику, основанную на типе пользователя. (в моем случае мне нужно иметь 3 разных файла промежуточного программного обеспечения js (isSubcontractor.js , isContractor.js , isWorker.js )
- добавить промежуточное программное обеспечение: «файл промежуточного программного обеспечения» внутри моей страницы
Если это правильно, как выполнить шаги 1 и 2? Есть ли какие-либо статьи или исходный код реального приложения, которые кратко объясняют, что я хотел?
Новичок здесь. Уже прошел здесь и там по всему Интернету, но не могу найти ответ, который я хотел: (
Ответ №1:
Пользовательские утверждения, безусловно, являются опцией, но для этого потребуются облачные функции или сервер. Да, вы можете сохранить тип пользователя в их документе Firestore и проверять его перед отображением страницы или при необходимости. Однако вы должны убедиться, что только авторизованные пользователи могут изменять свою роль.
Поток будет таким же простым, как:
- Пользователь входит в систему
- Чтение их роли из документа Firestore
- Перенаправление на соответствующую страницу
import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
import { getFirestore, doc, getDoc } from "firebase/firestore";
const auth = getAuth();
const firestore = getFirestore();
const login = async () => {
const { user } = await signInWithEmailAndPassword(auth, email, password);
// Reading user document
const docRef = doc(firestore, "users", user.uid);
const docSnap = await getDoc(docRef);
const { userType } = docSnap.data()
switch (userType) {
case 'contractor':
// redirect to /contractor
break;
case 'sub-contractor':
// redirect to /sub-contractor
break;
default:
// redirect to default page
break;
}
}
Я также хочу, чтобы пользователь мог видеть только страницы, связанные с их типами.
Вы можете использовать тот же метод в промежуточном программном обеспечении на стороне сервера. Сначала прочитайте UserType, а затем проверьте, авторизован ли пользователь для посещения страницы. Если нет, перенаправьте на любую другую страницу.
Лучшая часть использования пользовательских утверждений заключается в том, что вы также можете прочитать их в правилах безопасности базы данных реального времени, Firestore и хранилища. Если вы сохраняете тип пользователя в Firestore, вы не можете прочитать это в правилах безопасности любой другой службы Firebase. Использование Firestore также влечет за собой дополнительную плату за чтение роли пользователя каждый раз. Вам нужна облачная функция, чтобы устанавливать только пользовательское утверждение, а не читать утверждение каждый раз.