Firebase Authを使うときに登録・削除の通知をSlackに送りたいと思い実装してみたのでその手順を残します。
コードではのslackにuidを送信していますが、何を送信して良さそうかは調整・確認をお願いします。
方法と事前準備
登録時のイベントはfirebase functionsにイベントを受け取る関数を登録することで実現します。
Firebaseの中にslackとの連携する箇所がありますが、これはどうもcrash analyticsのイベントが起きたときに送ってくれるもので違いそうでした。
firebase auth slack とかで検索すると連携できそうな雰囲気で引っかかるので罠でした。
- firebase cli を
npm install -g firebase-tools
等でインストールする firebase login
firebase init functions
firebase deploy --only functions
functionsの中身
javascript(commonjs)の中身になります。 slackWebhookUrl を適切なものに変更してください。
functionsは今はv1/v2の移行期にあるようですが、 20240901の時点ではv2に onCreate
や onDelete
にあたるものがないようなので、v1の関数として作成しました。
const logger = require('firebase-functions/logger')
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()
const slackWebhookUrl = '[PUT_YOUR_WEBHOOK_URL]'
exports.sendSlackNotificationOnUserSignup = functions.auth.user().onCreate(async (user) => {
const message = {
text: `User Registered: ${user.uid}`,
}
try {
const response = await fetch(slackWebhookUrl, {
method: 'post',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(message),
})
if (!response.ok) {
throw new Error(`Error in Slack API response: ${response.statusText}`)
}
logger.log('Signup notification sent successfully')
} catch (error) {
logger.error('Error sending signup notification', error)
}
})
exports.sendSlackNotificationOnUserDelete = functions.auth.user().onDelete(async (user) => {
const message = {
text: `User Deleted: ${user.uid}`,
}
try {
const response = await fetch(slackWebhookUrl, {
method: 'post',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(message),
})
if (!response.ok) {
throw new Error(`Error in Slack API response: ${response.statusText}`)
}
logger.log('Delete notification sent successfully')
} catch (error) {
logger.error('Error sending delete notification', error)
}
})