Облачная функция Firebase - null user.displayName onCreate - PullRequest
2 голосов
/ 28 февраля 2020

Я пытаюсь написать функцию, которая будет отправлять приветственное письмо при создании пользователя. Я проследовал до этого учебника, в котором говорится, что можно получить доступ к displayName только что созданному пользователю с помощью user.displayName, хотя он продолжает возвращать null для меня. Я понял, что вероятная причина, по которой это происходит (поправьте меня, если я здесь ошибаюсь), заключается в том, что регистрация и настройка displayName пользователя происходит в два отдельных этапа на стороне клиента, и поэтому при запуске onCreate, естественно, будет user.displayName значение NULL. Вот мой код на стороне клиента, для справки:

fb.auth().createUserWithEmailAndPassword(payload.email, payload.password).then(user => {
  return user.user.updateProfile({ displayName: payload.name, });
}).catch(/* ... */);

Мне нужна облачная функция, которая запускается на user.updateProfile. Я посмотрел на функцию auth.user().onOperation (найдено здесь ), но когда я пытаюсь развернуть эту функцию в firebase, я получаю ошибку Error: Functions did not deploy properly. (полезно, ikr), которая, я думаю, что-то имеет делать с onOperation функцией private (поправьте меня, если я ошибаюсь).

Есть ли способ сделать то, что я пытаюсь сделать? Если так, то как? Кроме того, есть ли способ установить displayName на createUserWithEmailAndPassword, чтобы я мог продолжать использовать функцию onCreate?

Вот мой текущий onCreate код:

exports.sendWelcomeEmail = functions.auth.user().onCreate(user => {
  console.log('name:', user.displayName);
});

А вот моя попытка функции onOperation:

exports.sendWelcomeEmail = functions.auth.user().onOperation(user => {
  console.log('user:', user);
}, 'updateProfile');

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Если бы я был вами, я бы не использовал firebase auth для профиля пользователя. Возможно, лучше использовать коллекцию users, где у вас есть доступ к триггерам обновления.

Обычно я имею в виду наличие триггера при появлении нового пользователя auth, создающего пользователя в коллекции users. С этим дизайном у вас может быть триггер каждый раз, когда кто-то обновляет его профиль.

exports.onCreateAuthUser = functions.auth.user().onCreate(user => {
  firestore.collection('users').doc(user.uid).set({
     displayName: user.displayName,
     email: user.email,
     // any other properties 
  })

  //do other stuff
});

exports.onUpdateUser = functions
  .firestore.document('users/{id}')
  .onUpdate((change, context) => {
     // do stuff when user's profile gets updated
}

Надеюсь, это поможет:)

0 голосов
/ 28 февраля 2020

В настоящее время нет триггера облачных функций для обновления профиля Firebase Auth. Существует только onCreate и onDelete.

См .: Облачная функция авторизации Firebase onUpdate для случаев, когда пользователь обновляет свою электронную почту

В настоящее время нет способа задать свойство displayName пользователя. при создании учетной записи с использованием аутентификации по электронной почте / паролю. Для обновления профиля после создания учетной записи требуется второй вызов.

См .: Как настроить displayName пользователя Firebase?

По сути, вы собираетесь чтобы обойти эти ограничения. Не стесняйтесь связаться со службой поддержки Firebase, чтобы подать запрос на функцию , чтобы упростить это.

...