こんにちは、mabuiです。
今回はWebサービスでよくある
メールアドレスでユーザー登録後に認証メールの送信 → メール本文のリンクをクリック → 認証完了
の流れを、Firebase Authenticationを使って、Vuexのアクションメソッド内でやる処理を解説します。
登録処理中などで$store.dispatch
で叩きにいって使用してみてください。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
export const actions = { // 認証メール送信 async sendEmailLink() { const actionCodeSettings = { url: 'http://' + window.location.host + '/logout' } const user = firebase.auth().currentUser user .sendEmailVerification(actionCodeSettings) .then(function() { // Email sent. }) .catch(function(error) { // An error happened. }) }, } |
認証メール送信のアクションメソッドです。
メールを飛ばす処理は同期させる必要がないので、asyncで非同期にします。
Firebaseのインスタンスは生成しておいた状態で、
firebase.auth().currentUser
でログイン中のユーザー情報が取得できるので、
FirebaseのユーザーにひもづくsendEmailVerification
を使って認証メールを送信します。
引数にactionCodeSettings
を渡していて、ここにurlを設定すると、なんとメール内リンク先で認証後、指定したurlへのリンクを作成してくれます!便利!
このURLを公式ドキュメントでは継続URLと呼んでいます。
Firebase でユーザーを管理する
認証後ログアウトしてからログインし直すと、Firebaseのユーザー情報が持つemailVerified
がtrueに切り替わるので、この値で認証済みかどうかの判断ができます。
ログアウトしないと切り替わらないため、継続URLを使って、ログアウトのapiを叩くと再ログインまでの動線がスムーズに進むでしょう。
以上シンプルでしたが、認証メール送信メソッドの解説でした。
おまけ
ほぼ同じですが、登録ユーザーのパスワードの再設定メールを送信するメソッドも紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// パスワード再設定メール送信 async sendPasswordResetEmail({ email }) { const actionCodeSettings = { url: 'http://' + window.location.host } firebase .auth() .sendPasswordResetEmail(email, actionCodeSettings) .then(() => { // Email sent. }) .catch(() => { // An error happened. }) } |
メソッドの引数にメールアドレスを渡して、firebase.auth().sendPasswordResetEmail
を叩きましょう。
これでパスワードを変更できるリンクが記載されたメールがユーザーの元に届きます。
パスワード変更後、再ログインする時に新しいパスワードが適用されます。