Добавить аутентификацию Google в Firebase Real Time Database - PullRequest
0 голосов
/ 03 декабря 2018

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

Текущий режим базы данных:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Новый режим должен выглядеть следующим образом:

// These rules grant access to a node matching the authenticated
// user's ID from the Firebase auth token
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Что я должен использовать для аутентификации в моем случае? userID , Google providerID или токен как описано здесь ?

Это функция без аутентификации для хранения данных:

 createMeetup ({commit, getters}, payload) {
      console.log('index.js -> createMeetup')
      const meetup = {
        title: payload.title,
      }
      let imageUrl
      let key
      firebase.database().ref('meetups').push(meetup)
        .then((data) => {
          key = data.key
          return key
        })
        .then(() => {
          commit('createMeetup', {
            ...meetup,
            imageUrl: imageUrl,
            id: key
          })
        })
        .catch((error) => {
          console.log(error)
        })
    },

Ответы [ 4 ]

0 голосов
/ 12 декабря 2018

документация, которую вы указали там: Аутентификация с помощью входа в Google с помощью JavaScript .

Вы можете позволить своим пользователям проходить аутентификацию с помощью Firebase, используя свои учетные записи Google, интегрируя Google Sign-В в вашем приложении.Вы можете интегрировать Google Sign-In, либо используя Firebase SDK для выполнения процесса входа, либо выполнив поток Google Sign-In вручную и передав получившийся токен ID в Firebase.

Прежде чем начать:

  • Добавьте Firebase в свой проект JavaScript.
  • Включите вход в Google в консоли Firebase:
  • В консоли Firebase откройтеРаздел Auth.
  • На вкладке «Метод входа» включите метод входа в Google и нажмите «Сохранить».
  • Обработка потока входа с помощью Firebase SDK Если вы создаете веб-приложениеСамый простой способ аутентификации ваших пользователей с помощью Firebase с использованием их учетных записей Google - это обработать поток входа с помощью Firebase JavaScript SDK.(Если вы хотите аутентифицировать пользователя в Node.js или другой среде без браузера, вы должны обработать поток входа вручную.)

Для обработки потока входа с помощью Firebase JavaScriptSDK, выполните следующие действия:

Создайте экземпляр объекта поставщика Google:

var provider = new firebase.auth.GoogleAuthProvider();

Необязательно: Укажите дополнительные области OAuth 2.0, которые вы хотите запросить у поставщика проверки подлинности.Чтобы добавить область, позвоните addScope().

Например:

provider.addScope('https://www.googleapis.com/auth/contacts.readonly');

См. Документацию поставщика проверки подлинности.Необязательно: Чтобы локализовать поток OAuth провайдера на предпочтительном языке пользователя без явной передачи соответствующих пользовательских параметров OAuth, обновите код языка в экземпляре Auth перед запуском потока OAuth.

Например:

firebase.auth().languageCode = 'pt';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

Необязательно: Укажите дополнительные параметры настраиваемого поставщика OAuth, которые вы хотите отправить с запросом OAuth.Чтобы добавить пользовательский параметр, вызовите setCustomParameters для инициализированного поставщика с объектом, содержащим ключ, указанный в документации поставщика OAuth, и соответствующее значение.

Например:

provider.setCustomParameters({
    'login_hint': 'user@example.com'
});

Зарезервировано обязательноПараметры OAuth недопустимы и будут игнорироваться.См. Ссылку поставщика аутентификации для получения дополнительной информации.Выполните аутентификацию с помощью Firebase, используя объект провайдера Google.Вы можете предложить своим пользователям войти в систему с помощью их учетных записей Google, открыв всплывающее окно или перенаправив на страницу входа.Метод перенаправления предпочтителен на мобильных устройствах.

Чтобы войти с помощью всплывающего окна, позвоните signInWithPopup:

firebase.auth().signInWithPopup(provider).then(function(result) {

    // This gives you a Google Access Token. You can use it to access the Google API.
    var token = result.credential.accessToken;
    // The signed-in user info.
    var user = result.user;
    // ...

}).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;
    // ...
});

Также обратите внимание, что вы можете получить токен OAuth провайдера Google, который можетиспользоваться для получения дополнительных данных с помощью API Google.Здесь также можно отлавливать и обрабатывать ошибки.Список кодов ошибок см. В справочных документах Auth.

Чтобы выполнить вход, перенаправив на страницу входа, вызовите signInWithRedirect:

firebase.auth().signInWithRedirect(provider);

Затем вы также можетеполучить токен OAuth поставщика Google, позвонив по номеру getRedirectResult() при загрузке страницы:

firebase.auth().getRedirectResult().then(function(result) {
    if (result.credential) {
        // This gives you a Google Access Token. You can use it to access the Google API.
        var token = result.credential.accessToken;
        // ...
    }

    // The signed-in user info.
    var user = result.user;
}).catch(function(error) {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;
    // ...
});
0 голосов
/ 11 декабря 2018

Правила аутентификации в вашем вопросе только утверждают, что пользователи могут читать / записывать свои собственные (предположительно) пользовательские данные.

Я предполагаю, что вы скорее ищете решение, позволяющее пользователю разрешить создание встречиданные, и вы должны создать правила, подобные этим:

Эти правила позволяют любому пользователю, вошедшему в систему, создавать встречи

{
  "rules": {
    "meetups": {
      "$meetupId": {
        ".read": "auth.uid != null",
        ".write": "auth.uid != null"
      }
    }
  }
}

Ваш фрагмент кода, который отправляет новые данные встречи в базу данных, будетавтоматически пытаться и успешно или не удается в зависимости от того, вошел ли пользователь в систему или нет.Вам не нужно специально указывать Firebase, каким образом пользователь вошел в систему. Firebase SDK позаботится о вашей аутентификации.

Но если вы do захотите предоставить другие механизмыв зависимости от того, какой тип логина аутентифицирован пользователем, вы можете проверить это в правилах.Например, если вы хотите убедиться, что пользователь не просто "анонимно" вошел в систему.

См. Документацию: https://firebase.google.com/docs/database/security/user-security#section-variable

0 голосов
/ 12 декабря 2018

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

Шаг 1 - Подключение

Подключение к Firebase с помощью вашего ключа API / configкак обычно, должно выглядеть примерно так:

firebase.initializeApp(config)

См. также: https://firebase.google.com/docs/web/setup

Возможно, это где-то уже есть.Это не изменится, но если вы примените правила, как описано, ваши пользователи не смогут использовать Firebase после простого подключения.

Шаг 2 - Аутентификация

Этов основном говорит Firebase, кто связан.Это должно быть сделано с помощью токена / метода, который Firebase может проверить.Использование Google ID является наиболее распространенным методом.

С существующим идентификатором Google / логином пользователя

// Initialize a generate OAuth provider with a `google.com` providerId.
var provider = new firebase.auth.OAuthProvider('google.com');
var credential = provider.credential(googleUser.getAuthResponse().id_token);
firebase.auth().signInWithCredential(credential)

См. Также: https://firebase.google.com/docs/reference/js/firebase.auth.OAuthProvider#credential

Или заставить Firebase SDK выполнять поток входа

var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider).then(function(result) {
  // This gives you a Google Access Token. You can use it to access the Google API.
  var token = result.credential.accessToken;
  // The signed-in user info.
  var user = result.user;
  // ...
})

См. Также: https://firebase.google.com/docs/auth/web/google-signin

Этот последний вариант предпочтителен / предложен в документации, на которую вы ссылаетесь.

Если, как вы описали, пользователи уже могут войти с помощью Google в ваше приложение для другихфункциональности, то у вас уже должен быть поток входа где-то.В зависимости от вашей ситуации может быть целесообразно, чтобы Firebase SDK / библиотека взяла на себя этот процесс для простоты вашего приложения.

Шаг 3 - Использование базы данных

Наконецпосле аутентификации пользователей и применения предложенных вами правил вам также необходимо убедиться, что пути, по которым вы пишете, находятся в пределах доступных текущему пользователю.Вы можете поместить это в простую функцию, чтобы упростить ее.

const getUserRef = (ref) => {
  const user = firebase.auth().currentUser;
  return firebase.database().ref(`/users/${user.uid}/${ref}/`);
}

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

0 голосов
/ 04 декабря 2018

Вы можете разрешить пользователям входить / авторизоваться, используя несколько методов.Затем вы можете объединить их в одну учетную запись, как описано здесь:

https://firebase.google.com/docs/auth/web/account-linking

Так что на самом деле все сводится к двум вариантам:

  1. Разрешить пользователямвойти в систему несколькими способами, такими как Facebook, Google, Github, обычное имя пользователя / пароль и т. д.
  2. Или разрешить только один метод входа, например, только Google.

Какой бы вариант вы ни выбралипоможет вам решить, какой идентификатор использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...