質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Q&A

0回答

846閲覧

Vue,Firebase 画面にユーザー名表示させたい

konnnitiha

総合スコア1

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

0グッド

0クリップ

投稿2021/10/14 06:33

前提・実現したいこと

vueとfirebaseを使って投げ銭アプリを作成しています。
参考動画
このように登録画面からユーザ名を入力してダッシュボードに入力したユーザ名を表示できるようにしたい

発生している問題・エラーメッセージ

新規登録・ログイン機能までは実装できたのですが、登録したユーザー名を表示させることができませんでした。

該当のソースコード

HOME.vue 新規登録機能

<template> <div> <h1 class="title">新規登録画面</h1> <form> <ul> <li class="user-name"> <label for="user-name">ユーザ名</label> <input type="text" id="user-name" placeholder="UserName" v-model="username" /> </li> <li class="email"> <label for="email">メールアドレス</label> <input type="email" id="email" placeholder="E-mail" v-model="email" /> </li> <li class="password"> <label for="password">パスワード</label> <input type="password" id="password" placeholder="PassWord" v-model="password" /> </li> </ul> </form> <button class="button is-info is-outlined" @click="newRegister">新規登録</button> <br /> <router-link to="/login">ログインはこちらから</router-link> </div> </template> <script> //import firebase from 'firebase'; export default { name: 'Register', data() { return { username: '', email: '', password: '', }; }, methods: { newRegister() { this.$store.dispatch('newRegister', { username: this.username, email: this.email, password: this.password, }) }, } }; </script>

LOGIN.vue ログイン機能 

<template> <div> <h1 class="title">ログイン画面</h1> <form> <ul> <li> <label for="email">メールアドレス</label> <input type="email" id="email" placeholder="E-mail" v-model="loginEmail" /> </li> <li> <label for="password">パスワード</label> <input type="password" id="password" placeholder="PassWord" v-model="loginPassword" /> </li> </ul> </form> <button class="button is-info is-outlined" @click="loginUser">ログイン</button> <br /> <router-link to="/">新規登録はこちらから</router-link> </div> </template> <script> export default { name: 'singin', data() { return { loginEmail: '', loginPassword: '' }; }, methods: { loginUser() { this.$store.dispatch('loginUser', { loginEmail: this.loginEmail, loginPassword: this.loginPassword }) } } }; </script>

store.js

import Vue from 'vue' import Vuex from 'vuex' import firebase from 'firebase' import router from '@/router' Vue.use(Vuex) export default new Vuex.Store({ state: { username: '', email: '', password: '', loginEmail: '', loginPassword: '' }, mutations: { registerState(state, payload) { state.username = payload.username state.email = payload.email state.password = payload.password }, loginState(state, payload) { state.loginEmail = payload.loginEmail state.loginPassword = payload.loginPassword } }, actions: { newRegister(context, payload) { firebase .auth() .createUserWithEmailAndPassword(payload.email, payload.password) .then(() => { context.commit('registerState', payload) }) .then(() => { router.push('/about') }) .catch((e) => { console.error('エラー :', e.message) }) }, loginUser(context, payload) { firebase .auth() .signInWithEmailAndPassword(payload.loginEmail, payload.loginPassword) .then(() => { context.commit('loginState', payload) }) .then(() => { alert("ログイン成功!"); router.push('/about'); }) .catch((e) => { console.error('エラー :', e.message) }) } }, modules: { } })

ダッシュボード about.vue

<template> <div class="Home"> <div> <p class="userName">{{ userName }}さんようこそ!!</p> </div> <h1>ユーザ一覧</h1> <p>ユーザ名</p> </div> </template>

試したこと

ユーザー名をFirebaseへ格納した後、非同期処理でstoreへ渡し、ログイン後画面へ遷移するためsetTimeout()
を使ってsetTimeout(() => { this.$store.dispatch('loginUser', result.user) this.$router.push('/home'); }, 1000)
と記述してみたりgettersでgetUserName: state => state.user.displayName mutationでupdataUser(state, userInformation) { state.user = userInformation; }actionでupdataUser(context, userInfomation) { context.commit('updataUser', userInfomation) }と記述して他の人のコード参考にしてみたりしたのですが、またcomputed:{ name(){ return this.$store.state.user.name; } },と記入してみましたが空白のまま何も表示できませんヒントだけでも構いませんのでお力を貸していただけると幸いです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

created () { firebase.auth().onAuthStateChanged((user)=> { if (user) { this.userName = user.displayName } }); }, mounted() { this.userName = this.getUserName } };

一応今のダッシュボードのコードです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問