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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

2652閲覧

docker + laravel + Vue.jsでユーザをDBに登録できない

aroma

総合スコア8

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/10/19 13:57

編集2020/10/19 14:00

こんにちは。
Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう (6) 認証機能とVuexを参考に、勉強をしていました。
しかし、ユーザを登録するときに500エラーが発生し、登録できませんでした。
エラー内容は以下のようになります。

JavaScript

1POST http://127.0.0.1:8000/api/register 500 (Internal Server Error) 2(Promise/async): "Error: Request failed with status code 500" 3 4found in 5 6---> <Login> at resources/js/pages/Login.vue 7 <App> at resources/js/App.vue 8 <Root> 9 10Error: Request failed with status code 500 11 at createError (app.js?id=695473af3d61191f9d27:711) 12 at settle (app.js?id=695473af3d61191f9d27:972) 13 at XMLHttpRequest.handleLoad (app.js?id=695473af3d61191f9d27:180)

また、developer toolのNetworkでエラー内容の詳細を確認しました。

JavaScript

1"message": "Malformed UTF-8 characters, possibly incorrectly encoded", 2 "exception": "InvalidArgumentException",

dockerの環境はサイトのものを用いずに他のサイトを参考に作成しました。

バージョン一覧

Laravel 6.18
laravel-mix 4.0.7
Vue.js 2.6.12
vuex 3.5.1
docker-compose 1.27.4

該当コード

以下のactionsのregisterのconst response = await axios.post('/api/register', data)でエラーが起きます。

JavaScript

1//resources\js\auth.js 2import { OK } from '../util' 3 4const state = { 5 user: null, 6 //apiの呼び出し判定 7 apiStatus: null 8} 9 10const getters = { 11 //ログインチェック 12 check: state => !!state.user, 13 //ログインしているユーザの名前 14 username: state => state.user ? state.user.name : '' 15} 16 17const mutations = { 18 setUser(state, user) { 19 state.user = user 20 }, 21 setApiStatus(state, status) { 22 state.apiStatus = status 23 } 24} 25 26const actions = { 27 async register(context, data) { 28 const response = await axios.post('/api/register', data) 29 context.commit('setUser', response.data) 30 }, 31 async login(context, data) { 32 context.commit('setApiStatus', null) 33 const response = await axios.post('/api/login', data) 34 .catch(err => err.response || err) 35 if (response.status === OK) { 36 context.commit('setApiStatus', true) 37 context.commit('setUser', response.data) 38 return false 39 } 40 context.commit('setApiStatus', false) 41 context.commit('error/setCode', response.status, { 42 root: true 43 }) 44 }, 45 async logout(context) { 46 const response = await axios.post('/api/logout') 47 context.commit('setUser', null) 48 }, 49 //アプリ起動時にログインチェック 50 async currentUser(context) { 51 const response = await axios.get('/api/user') 52 const user = response.data || null 53 context.commit('setUser', user) 54 } 55} 56 57export default { 58 namespaced: true, 59 state, 60 getters, 61 mutations, 62 actions 63}

JavaScript

1//resouces\js\index.js 2import Vue from 'vue' 3import Vuex from 'vuex' 4 5import auth from './auth' 6 7Vue.use(Vuex) 8 9const store = new Vuex.Store({ 10 modules: { 11 auth, 12 } 13}) 14 15export default store

vue

1//resources\js\pages\Login.vue 2<template> 3 <div class="container--small"> 4 <ul class="tab"> 5 <li 6 class="tab__item" 7 :class="{ 'tab__item--active': tab === 1 }" 8 @click="tab = 1" 9 > 10 Login 11 </li> 12 <li 13 class="tab__item" 14 :class="{ 'tab__item--active': tab === 2 }" 15 @click="tab = 2" 16 > 17 Register 18 </li> 19 </ul> 20 <div class="panel" v-show="tab === 1"> 21 <form class="form" @submit.prevent="login"> 22 <label for="login-email">Email</label> 23 <input 24 type="text" 25 class="form__item" 26 id="login-email" 27 v-model="loginForm.email" 28 /> 29 <label for="login-password">Password</label> 30 <input 31 type="password" 32 class="form__item" 33 id="login-password" 34 v-model="loginForm.password" 35 /> 36 <div class="form__button"> 37 <button type="submit" class="button button--inverse">login</button> 38 </div> 39 </form> 40 </div> 41 <div class="panel" v-show="tab === 2"> 42 <form class="form" @submit.prevent="register"> 43 <label for="username">Name</label> 44 <input 45 type="text" 46 class="form__item" 47 id="username" 48 v-model="registerForm.name" 49 /> 50 <label for="email">Email</label> 51 <input 52 type="text" 53 class="form__item" 54 id="email" 55 v-model="registerForm.email" 56 /> 57 <label for="password">Password</label> 58 <input 59 type="password" 60 class="form__item" 61 id="password" 62 v-model="registerForm.password" 63 /> 64 <label for="password-confirmation">Password (confirm)</label> 65 <input 66 type="password" 67 class="form__item" 68 id="password-confirmation" 69 v-model="registerForm.password_confirmation" 70 /> 71 <div class="form__button"> 72 <button type="submit" class="button button--inverse">register</button> 73 </div> 74 </form> 75 </div> 76 </div> 77</template> 78 79<script> 80export default { 81 data() { 82 return { 83 tab: 1, 84 loginForm: { 85 email: "", 86 password: "", 87 }, 88 registerForm: { 89 name: "", 90 email: "", 91 password: "", 92 password_confirmation: "", 93 }, 94 }; 95 }, 96 methods: { 97 async login() { 98 // authストアのloginアクションを呼び出す 99 await this.$store.dispatch("auth/login", this.loginForm); 100 // トップページに移動する 101 this.$router.push("/"); 102 }, 103 async register() { 104 // authストアのresigterアクションを呼び出す 105 await this.$store.dispatch("auth/register", this.registerForm); 106 // トップページに移動する 107 this.$router.push("/"); 108 }, 109 }, 110}; 111</script>

php

1//routes\api.php 2<?php 3 4use Illuminate\Http\Request; 5use Illuminate\Support\Facades\Route; 6 7//会員登録 8Route::post('/register', 'Auth\RegisterController@register')->name('register'); 9//ログイン 10Route::post('/login', 'Auth\LoginController@login')->name('login'); 11//ログアウト 12Route::post('/logout', 'Auth\LoginController@logout')->name('logout'); 13//ログインユーザ 14Route::get('/user', fn () => Auth::user())->name('user');

php

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\Providers\RouteServiceProvider; 7use App\User; 8use Illuminate\Foundation\Auth\RegistersUsers; 9use Illuminate\Support\Facades\Hash; 10use Illuminate\Support\Facades\Validator; 11use Illuminate\Http\Request; 12 13class RegisterController extends Controller 14{ 15 /* 16 |-------------------------------------------------------------------------- 17 | Register Controller 18 |-------------------------------------------------------------------------- 19 | 20 | This controller handles the registration of new users as well as their 21 | validation and creation. By default this controller uses a trait to 22 | provide this functionality without requiring any additional code. 23 | 24 */ 25 26 use RegistersUsers; 27 28 /** 29 * Where to redirect users after registration. 30 * 31 * @var string 32 */ 33 protected $redirectTo = RouteServiceProvider::HOME; 34 35 /** 36 * Create a new controller instance. 37 * 38 * @return void 39 */ 40 public function __construct() 41 { 42 $this->middleware('guest'); 43 } 44 45 /** 46 * Get a validator for an incoming registration request. 47 * 48 * @param array $data 49 * @return \Illuminate\Contracts\Validation\Validator 50 */ 51 protected function validator(array $data) 52 { 53 return Validator::make($data, [ 54 'name' => ['required', 'string', 'max:255'], 55 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 56 'password' => ['required', 'string', 'min:8', 'confirmed'], 57 ]); 58 } 59 60 /** 61 * Create a new user instance after a valid registration. 62 * 63 * @param array $data 64 * @return \App\User 65 */ 66 protected function create(array $data) 67 { 68 return User::create([ 69 'name' => $data['name'], 70 'email' => $data['email'], 71 'password' => Hash::make($data['password']), 72 ]); 73 } 74 75 protected function registered(Request $request, $user) 76 { 77 return $user; 78 } 79}

docker

1#docker-compose.ymlのバージョン 2version: "3.8" 3#docker volumeの設定(ローカルとDockerコンテナ間のファイル共有を設定するオプション) 4volumes: 5 docker-volume: 6 7#services以下に各コンテナの設定を書く 8services: 9 #Webサーバーのコンテナ 10 web: 11 image: nginx:1.18 12 ports: 13 - "8000:80" 14 depends_on: 15 - app 16 volumes: 17 - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf 18 - .:/var/www/html 19 #アプリケーションのコンテナ 20 app: 21 build: ./docker/php 22 volumes: 23 - .:/var/www/html 24 #データベースのコンテナ 25 db: 26 image: mysql:5.7 27 ports: 28 - "3306:3306" 29 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci 30 environment: 31 MYSQL_DATABASE: db_name 32 MYSQL_USER: user 33 MYSQL_PASSWORD: password 34 MYSQL_ROOT_PASSWORD: root 35 TZ: "Asia/Tokyo" 36 volumes: 37 - docker-volume:/var/lib/mysql 38 39 phpmyadmin: 40 image: phpmyadmin/phpmyadmin 41 environment: 42 - PMA_ARBITRARY=1 43 - PMA_HOST=db 44 - PMA_USER=user 45 - PMA_PASSWORD=password 46 depends_on: 47 - db 48 links: 49 - db 50 ports: 51 - 8084:80 52 volumes: 53 - "./phpmyadmin/sessions:/sessions"

試したこと

Vue.js + laravel ユーザ認証 登録ができず困っています
を参考にして、自分もログイン状態で登録を行っていようとしていないか確認しました。

また、冒頭のNetworkのエラーからDBの文字コードが関係していると思い、mysqlのDBの文字コードをlatin1からUTF-8に変更しましたがエラーは海洋しませんでした。

そして、compose updateを行いましたが解消しませんでした。

コマンドではmysqlにアクセスすることはできます。
また、phpmyadminにも接続できます。

わかりにくい箇所をあると思いますが、ご回答いただけますと幸いです。

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

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

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

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

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

aroma

2020/10/21 14:41

ご回答ありがとうございます。 try-catchで囲むと"message": "Malformed UTF-8 characters, possibly incorrectly encoded", "exception": "InvalidArgumentException", が出力されました。 文字コードの変換でエラーが発生しているようです。
guest

回答1

0

ベストアンサー

JavaScript

1"message": "Malformed UTF-8 characters, possibly incorrectly encoded", 2 "exception": "InvalidArgumentException",

このエラーメッセージに続いて stacktrace が出ていれば、
サーバー側 PHP のどの部分でエラーが発生しているかを確認して、
どのような文字コードの変換でエラーが発生しているのかを
更に確認して、その部分に必要な対策を実施してみましょう

まだ、この時点ではデータベースが原因とは限らず、
データベースに関係なく文字コードの変換が必要になる例はあるようです

参考:

投稿2020/10/20 04:23

y_shinoda

総合スコア3272

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

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

aroma

2020/10/21 14:40

ご回答ありがとうございます。 エラーの下にstacktraceが出ているので調べてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問