Как создать запись в базе данных Firebase Firestore после Google Auth - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю веб-приложение, используя vanilla JS и firebase. Я следовал учебному пособию, которое предназначено для регистрации пользователя по электронной почте и паролю, и у меня есть код для создания пользователя, вставки записи в коллекцию базы данных «пользователи», с идентификатором пользователя и био-значением, полученным из формы. .

Это:

// sign up the user & add firestore data
auth.createUserWithEmailAndPassword(email, password).then(cred => {
    return db.collection('users').doc(cred.user.uid).set({
      bio: signupForm['signup-bio'].value
    });
  }).then(() => {
  //do some other stuff
  });
});

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

 /**
 * Start the auth flow and authorises to Firebase.
 * @param{boolean} interactive True if the OAuth flow should request with an interactive mode.
 */
function startAuth(interactive) {
// Request an OAuth token from the Chrome Identity API.
chrome.identity.getAuthToken({interactive: !!interactive}, function(token) {
if (chrome.runtime.lastError && !interactive) {
  console.log('It was not possible to get a token programmatically.');
} else if(chrome.runtime.lastError) {
  console.error(chrome.runtime.lastError);
} else if (token) {
  // Authorize Firebase with the OAuth Access Token.
  var credential = firebase.auth.GoogleAuthProvider.credential(null, token);
  firebase.auth().signInWithCredential(credential).catch(function(error) {
    // The OAuth token might have been invalidated. Lets' remove it from cache.
    if (error.code === 'auth/invalid-credential') {
      chrome.identity.removeCachedAuthToken({token: token}, function() {
        startAuth(interactive);
      });
    }
  });
  } else {
  console.error('The OAuth Token was null');
  }
});

}

По сути, я хочу взять функциональность из приведенного выше блока кода и применить часть, которая создает документ в коллекции пользователей, и использовать его. со вторым блоком. Если кто-нибудь может помочь мне понять, как вернуть идентификатор пользователя из Google Auth и вставить его в коллекцию «пользователи» с идентификатором документа, совпадающим с идентификатором пользователя, который будет очень полезен.

Спасибо, B

Обновление:

**// Authorize Firebase with the OAuth Access Token.
  var credential = firebase.auth.GoogleAuthProvider.credential(null, token);
  firebase.auth().signInWithCredential(credential)
  .then(cred => {
      return db.collection('users').doc(cred.user.uid).set({
        bio: 'testing'
      });
  })
  .catch(function(error) {
      // The OAuth token might have been invalidated. Lets' remove it from cache.
      if (error.code === 'auth/invalid-credential') {
        chrome.identity.removeCachedAuthToken({token: token}, 
function() {
          startAuth(interactive);
        });
      }
  });**

1 Ответ

1 голос
/ 19 апреля 2020

Подобно методу createUserWithEmailAndPassword(), метод signInWithCredential() возвращает Обещание, которое разрешается с UserCredential.

Поэтому вы должны сделать следующее:

  firebase.auth().signInWithCredential(credential)
  .then(cred => {
      return db.collection('users').doc(cred.user.uid).set({
        bio: signupForm['signup-bio'].value
      });
  })
  .catch(function(error) {
      // The OAuth token might have been invalidated. Lets' remove it from cache.
      if (error.code === 'auth/invalid-credential') {
        chrome.identity.removeCachedAuthToken({token: token}, function() {
          startAuth(interactive);
        });
      }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...