Проблема:
Мне нужно сделать запросы к базе данных на стороне сервера моего приложения, написанного с использованием Next.js и Firebase (не самая лучшая комбинация, я знаю) для подготовкиисходные данные для клиентской стороны.
Проблема в том, что я хотел бы использовать тот же код, который выполняется на стороне клиента на сервере (используя клиентский SDK Firebase на сервере для запросов к БД).
Но я не знаю, как открыть сеанс пользователя на стороне сервера.
На сервере нет пользователя, вошедшего в клиентский SDK, и, следовательно, возвращается 403для ограниченных ресурсов, даже если клиентская сторона имеет к ним доступ (он знает текущего пользователя)
Я пробовал следующее:
Взлом пользовательского токена (не могу использовать ID токен, чтобы петь в)
В настоящее время я должен добавить маркер идентификатора пользователя в файл cookie.Таким образом, токен добавляется к каждому последующему запросу, и серверная сторона может генерировать собственный токен (я не могу войти с помощью токена ID), через который я могу затем войти на серверной стороне приложения, а также на стороне клиента (которыйуже вошел в систему, если постоянство включено).
Это огромное излишество, и я должен иметь возможность войти на сервер так же, как на клиенте, потому что он фактически действует как сам клиент (он не выполняет никаких привилегированных операций).
Второй вход в систему на сервере
Другое решение состояло в том, чтобы отправить учетные данные с помощью файла cookie (угроза безопасности), а затем войти на сервер во второй раз.Это не работает с одноразовыми сеансами аутентификации (например, с одноразовыми ссылками на электронную почту, потому что сервер эффективно регистрируется во второй раз).
Официальный пример бесполезен
В Next.jsВ репо есть пример для autbease auth, который теперь прокомментировал выборку данных на стороне сервера.Даже если он не был закомментирован, он не проверяет разрешение пользователя, он просто выбирает данные, если пользователь найден https://github.com/zeit/next.js/tree/canary/examples/with-firebase-authentication