💌

Google Cloud Identity Platformから送るパスワードの再設定メールを日本語化する

2024/04/11に公開

こんにちは、エンジニアの加藤(@tomo_k09)です。
PharmaXの一部サービスでは、Google CloudのIdentity Platform(以下Identity Platform)のマルチテナンシー構成でユーザーの管理を認証をしています。

パスワードを忘れたユーザー向けに、パスワードの再設定メールを送信する機能を実装したのですが、メールの内容を日本語化するのに少しハマりどころがありました。

そこで、この記事では日本語でパスワードリセット案内メールを送る方法についてご紹介します。

本記事の前提

  • Identity Plaformでマルチテナンシー構成を採用していること
  • Identity Platformでメール認証方式を採用していること

実行環境

  • typescript 5.4.3
  • react 18.2.0
  • next 14.0.2
  • firebase/auth 1.7.0

パスワードの再設定メールを送信するAPIの紹介

前提として、FirebaseのAdmin SDKにsendPasswordResetEmailというAPIが用意されています。
今回ご紹介する方法は、このAPIを使って実装します。

実装イメージは以下の通りです。

import { getAuth, sendPasswordResetEmail } from "firebase/auth";

const auth = getAuth();
sendPasswordResetEmail(auth, email)
  .then(() => {
    // Password reset email sent!
    // ..
  })
  .catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    // ..
  });

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

言語設定を日本語に変更してもメールが英語で表示された

日本語でパスワードリセットの案内メールを送るためにまずやったことは、Firebaseのテンプレートメールの言語設定を日本語にすることです。

↓のように設定しました。

Identity Platformの言語設定

しかし、言語設定を日本語にしたにも関わらず、メールの文面は英語のままでした。

Your %APP_NAME% team
Hello,

Follow this link to reset your NEOPharmacy dev password for your foo@hogehoge.co.jp account.

https:// xxxxx.firebaseapp.com/__/auth/action?mode=resetPassword&oobCode=piyopiypiyo&lang=en&tenantId=hogehoge

If you didn’t ask to reset your password, you can ignore this email.

Thanks,

XXXX team

送られてきたパスワード再設定用のリンクをよくよく見ると『lang=en』となっており、ちゃんと言語設定が日本語に変更されていないようでした。

Identity Platformのマルチテナンシーを使っていると言語設定が反映されないらしい

冒頭のも書いた通り、PharamXのサービスではIdentity Platformのマルチテナンシーという機能を使っています。

どうやらマルチテナンシーを使っていると、コンソールから言語設定を日本語に変えても、メールの文面は英語のままになってしまうようでした。

そのため、auth.languageCode = 'ja'; と明示的にlanguageCodeを指定する必要があります。実装イメージは以下です。

import { getAuth, sendPasswordResetEmail } from "firebase/auth";

const auth = getAuth();
auth.languageCode = 'ja';// 言語設定を追加

sendPasswordResetEmail(auth, email)
  .then(() => {
    // Password reset email sent!
    // ..
  })
  .catch((error) => {
    const errorCode = error.code;
    const errorMessage = error.message;
    // ..
  });

無事に以下のようなメールが日本語のメールが送られるようになりました。

お客様

YOUR APP の foo@hogehoge.co.jp アカウントのパスワードをリセットするには、次のリンクをクリックしてください。

https:// hogehoge.firebaseapp.com/__/auth/action?mode=resetPassword&oobCode=piyopiyo&lang=ja&tenantId=hogehoge

パスワードのリセットを依頼していない場合は、このメールを無視してください。

よろしくお願いいたします。

hogehoge チーム

おわりに

パスワード再設定メールを日本語にするという簡単そうな実装でしたが、意外と情報が落ちていなかったので、この情報が誰かの役に立てば幸いです。

PharmaXでは、様々なバックグラウンドを持つエンジニアをお待ちしております。
もし興味をお持ちの場合は、私のXアカウント(@tomo_k09)までお気軽にメッセージをいただけますと幸いです。まずはカジュアルにお話しましょう!

PharmaXテックブログ

Discussion