Nuxt.jsでFirebase Authenticationを使ってソーシャルログインを実装している際にタイトルのエラーが発生して解決までだいぶ時間がかかってしまったので二度と迷わないようにメモ。
問題があった箇所
FirebaseのsignInWithRedirectを使用してTwitterなりGoogleアカウントなりでログイン処理を行なったあとトリガーされるonAuthStateChangedで取得できるユーザー情報(user)をストアのLoginUserActionへ渡し、ストアのstateに挿入しようとしたところタイトルのエラーが発生した。
import { auth } from '~/plugins/firebase.js'
export default (context) => {
const { store } = context
return new Promise((resolve, reject) => {
auth.onAuthStateChanged((user) => {
if (user) {
store.dispatch('login/setLoginUserAction', user)
} else {
store.dispatch('login/deleteLoginUserAction')
}
resolve()
})
})
}
解決方法
結論:引数userの渡し方がまずかった。
修正したコードは以下。
import { auth } from '~/plugins/firebase.js'
export default (context) => {
const { store } = context
return new Promise((resolve, reject) => {
auth.onAuthStateChanged((user) => {
if (user) {
const { uid, displayName, photoURL } = user
store.dispatch('login/setLoginUserAction', { uid, displayName, photoURL })
} else {
store.dispatch('login/deleteLoginUserAction')
}
resolve()
})
})
}
エラーメッセージを最初見たときは「え?Actionでstate更新してないよ??mutationで更新してるよ???」としばらく詰まってたが、そもそも値の渡し方がミスってたというオチだった。しょうもなあああああああ。
同じことで詰まってる人がすぐ解決しますように。
参考記事
以下2件は同様の事象。やはりハマりどころっぽい。
Firebase AuthenticationとVuexの合わせ技バグでハマった
別件だけど同じく引数の渡し方でエラーとなっていたケース。
Vuex.store.stateの値をmutationsで変更しようとしたら、mutationsを使わずに値を変えるなと怒られた – Qiita