FirebaseUI を使用してユーザ作成時に Cloud Functions の auth.user().onCreate で user.displayName がnullになっていることの対策

やりたいこと

FirebaseUIを使用して新規ユーザ登録をして、
そのイベントをCloud Functionsで拾って
Cloud Firestore の "/users" コレクションに新規 user と同じ uid のドキュメントを 追加する。

ドキュメントの email, name フィールドは、
それぞれ FirebaseUI で入力した "email", "first & lastname" と同じにする。

困ったこと

Cloud Functions のコード
下記は失敗例

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();

functions.auth.user().onCreate(user => {
  const userUid = user.uid; 
  const userEmail = user.email; 
  const userName = user.displayName // 何故かnull

  const newUser = {
    email: userEmail,
    name: userName
  };

  return admin
    .firestore()
    .collection("users")
    .doc(userUid)
    .set(newUser);
});

user.uid と user.email はとれるが
user.displayName が null。どうやら仕様らしい。

https://github.com/firebase/firebase-functions/issues/95

最後のほうのコメントでfirebase-admin経由では取れる、とあったので、
試したところ取れた。

最終的なコード

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();

// 関数をasyncにする
exports.createUserDocument = functions.auth.user().onCreate(async user => {
  const userUid = user.uid;
  const userEmail = user.email;

  // admin.auth().getUser() 経由で取得, 取得するまでawait
  const authedUser = await admin.auth().getUser(userUid);
  const userName = authedUser.displayName;
  
  const newUser = {
    email: userEmail,
    name: userName
  };

  return admin
    .firestore()
    .collection("users")
    .doc(userUid)
    .set(newUser);
});