前提・実現したいこと
Firestoreを使いVue.jsで簡略な投げ銭アプリの開発をしています。
新規登録時に各ユーザーに以下の情報を持たせてFirestoreのドキュメントに保存するものとしています。
・自身のuid
・ユーザーネーム
・メールアドレス
・自身の残高
発生している問題
例えば、ユーザーAとユーザーBというユーザーがいます。
ユーザーAにwallet:500というデータを持たせ新規登録
↓
画面に残高500円と表示される
↓
ログアウト
↓
ユーザーBにwallet:300というデータを持たせ新規登録
↓
画面に残高500円と表示される
このようにエディタで登録時のwalletの値を変えて新規登録しても前の残高が表示されてしまいます。
今、自分で確認できていることは以下のふたつです。
① 一度リロードした後、ログアウトをしwalletの値を変更して新規登録をした時は変更した値が表示される
② ①の手順を行わずにコンソールとFirestoreのドキュメントを確認したところ、どちらも前のユーザーのwallet残高が登録されている。
該当のソースコード
↓SignUp.js
vue
1methods: { 2 async signUp() { 3 await this.$store.dispatch('signUp', { username:this.username, email:this.email, password:this.password }); 4 const user = await firebase.auth().currentUser; 5 const db = await firebase.firestore(); 6 await db.collection('myData').doc(user.uid).set({ 7 uid: user.uid, 8 userName: user.displayName, 9 email: user.email, 10 myWallet: 700 11 }); 12 await this.$store.dispatch('getMyWallet', user.uid); 13 this.$router.push('/home'); 14 } 15 }
↓store.js
javascript
1state() { 2 myWallet: '' 3}, 4getters: { 5 getMyWallet: state => state.myWallet.myWallet 6} 7mutations: { 8 getMyWallet(state, doc) { 9 state.myWallet = doc.data(); 10 console.log(doc.data()) 11 } 12}, 13actions: { 14//新規登録時の関数 15 async signUp({ commit }, userInfomation) { 16 try { 17 await firebase 18 .auth() 19 .createUserWithEmailAndPassword( 20 userInfomation.email, 21 userInfomation.password 22 ); 23 const user = firebase.auth().currentUser; 24 await user.updateProfile({ 25 displayName: userInfomation.username, 26 }); 27 await commit('setUserName', user); 28 } catch (e) { 29 alert(e.message); 30 } 31 }, 32//現在ログインしてるユーザーの残高を取得する関数 33 async getMyWallet({ commit }, uid) { 34 const db = firebase.firestore(); 35 const doc = await db 36 .collection('myData') 37 .doc(uid) 38 .get(); 39 commit('getMyWallet', doc); 40 } 41}
新規登録後に画面遷移するページでもdispatchでgetMyWalletを呼び出しています。
↓Home.vue
vue
1 // リロードしても残高が消えないようにする処理 2 created() { 3 this.getMyWallet(); 4 }, 5 methods: { 6 async getMyWallet() { 7 const user = await firebase.auth().currentUser; 8 this.$store.dispatch('getMyWallet', user.uid); 9 } 10 }
関係ありそうな部分だけコードを抜き出してみました????♂️
原因がわからず前に進めない状況ですので、お力添えいただければ幸いです。
あなたの回答
tips
プレビュー