Firebase, oauth, elm

Я пытаюсь реализовать простой инструмент для голосования, SPA, используя Elm. Я бы хотел использовать для этого Firebase. Я нашел пару вариантов, как Elm может работать с Firebase:

  1. Некоторые пакеты Elm, но они используют собственные привязки.
  2. Эльм разговаривает с JS через порты.
  3. Elm с использованием REST API.

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

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

Я являюсь владельцем проекта Firebase, и это приложение Elm работает на меня, я вижу результаты GET и даже могу отправить PATCH для голосования.

Однако, как упоминалось выше, никто другой не может получить доступ к данным через мое приложение и REST. Первый запрос GET возвращает несанкционированный доступ, но я вижу новых пользователей, вошедших в систему / зарегистрированных в консоли Firebase.

Мое приложение использует мой ключ API, и токен доступа выбирается, затем токен доступа присоединяется к запросу REST (я пробовал оба метода: авторизация, заголовок Bearer и? Access_token =). Я пару раз читал образцы и документы Firebase, но мне все еще чего-то не хватает.

Можно ли оформить это приложение так, как я хочу? Что еще нужно сделать, чтобы разрешить REST-запрос от других пользователей?

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

Sidney 11.04.2018 19:00

Вы можете поместить в свои правила переменную $ uid - она ​​представляет собой идентификатор текущего пользователя, вошедшего в систему. Используя это, вы можете создавать разделы в своей базе данных, доступные для чтения конкретным пользователям. Вы можете прочитать больше на firebase.google.com/docs/database/security

lfarroco 11.04.2018 20:34
3
2
497
1

Ответы 1

Как я уже сказал в своем вопросе, я что-то упустил. С огромной помощью сообщества Elm в Slack я наконец понял недостающую часть. Эта страница: https://firebase.google.com/docs/database/rest/auth упоминает два типа аутентификации.

  1. Токены доступа Google OAuth2
  2. Токены Firebase ID

Я использовал вариант 1, но я должен использовать вариант 2 для моего простого SPA. Используя Firebase SDK, легко получить токен

firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {

который должен быть прикреплен к каждому HTTP-запросу, отправляемому в базу данных реального времени на Firebase. Такой токен нужно поместить в запрос? Auth =

Используя этот токен, другие пользователи могут получить доступ к моему приложению.

Другие вопросы по теме