GAミント至上主義

Web Monomaniacal Developer.

Firebaseでユーザー作成/削除時にFunctionsでなんかやる

今更ゾンビランドサガを見始めて宮野節を堪能してます。
yagish履歴書でユーザー側でのアカウント削除を実装するにあたり、退会率などをみるため、せめてログには残したいと思った。
おかげさまで退会率は1%以下で使用するユーザーはかなり限られるため最低限の実装を予定。

自分でアカウントを削除させる処理

削除は下記公式どおり、ユーザーオブジェクトのdelete()を実行するだけ。
だけどログインしてから一定(詳細は不明)時間経つとエラーになるので、一度ログアウトし、再度ログインをしてもらう必要があった。
実行するまで切れてるか分からないので、エラーが出たら再ログインを求める案内文言でカバー。

var user = firebase.auth().currentUser;

user.delete().then(function() {
  // User deleted.
}).catch(function(error) {
  // An error happened.
});

https://firebase.google.com/docs/auth/web/manage-users?hl=ja#delete_a_user

Functions側

とりあえずログに出すだけ。
user(UserRecord)を受け取れるのでそれを使っていろいろできる。

exports.loggingUserCreate = functions
  .auth
  .user()
  .onCreate(user => {
    const data = JSON.stringify(user.toJSON())
    console.log(`account created ${data}`)
    return true
  })

userが持っている情報は下記ドキュメント
Interface: UserRecord  |  Firebase

最後のreturnは

Function returned undefined, expected Promise or value

というエラーが出るのでつけているが値に特に意味はなさそう。

ログであればemail, uidなど指定で出したほうがいいけど、とりあえずtoJSONで全部出して試してた段階。

登録、退会時に通知メールを送るにはSendGridなどを使う必要がありそう。
社内向けなら以前書いたようなHangOutsチャット連携もありかもしれない。

uyamazak.hatenablog.com

あとはuidを元にfirestoreに保存してあるデータを削除するのがよくやりそうだけど、yagishの場合はユーザー側に機能があるのでそちらで明示的にやってもらうことを考えている。