Итераторы более приятны:
const matches = (text, pattern) => ({
[Symbol.iterator]: function * () {
const clone = new RegExp(pattern.source, pattern.flags);
let match = null;
do {
match = clone.exec(text);
if (match) {
yield match;
}
} while (match);
}
});
Использование в цикле:
for (const match of matches('abcdefabcdef', /ab/g)) {
console.log(match);
}
Или если вы хотите массив:
[ ...matches('abcdefabcdef', /ab/g) ]
Я думаю, что для одностраничных приложений вы должны использовать прослушиватель onAuthStateChanged
и обеспечивать доступ с помощью правил безопасности по конкретным данным. Если вы хотите заблокировать доступ к полной странице, вам лучше использовать систему cookie. Firebase Auth предоставляет эту опцию: https://firebase.google.com/docs/auth/admin/manage-cookies
С помощью файлов cookie вы должны проверить и проверить сервер cookie стороне, в противном случае не обслуживать страницу и показывать какую-либо ошибку или перенаправлять на страницу входа.