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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5491閲覧

会員登録ができない(axios.postでフォーム送信)

popc

総合スコア32

Vue.js

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/10/20 12:15

編集2019/10/24 10:02

前提・実現したいこと

Laravelで会員登録&ログインを実装しようとしています。
プロジェクトは下記コマンドで作成しました。

composer create-project --prefer-dist laravel/laravel

Vue.jsを使用しており、axios.postでフォームのデータを送っています。
RegisterController.phpでValidator,createなどが実行されているようです。(Laravel初心者なので詳しくはわかっていません…)

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

フォームのデータがDBに登録されません。バリデーションもききません。
エラーも出ずログも吐き出されず、そのまま…です。

該当のソースコード

register.vue(必要なところ以外省略しています)

javaScript

1 data () { 2 return { 3 registerForm:{ 4 name:'', 5 user_id:'', 6 email: '', 7 password: '', 8 password_confirmation:'' 9 } 10 } 11 }, 12 methods: { 13 async register() { 14 // authストアのresigterアクションを呼び出す 15 await this.$store.dispatch('auth/register', this.registerForm) 16 17 if (this.apiStatus) { 18 // トップページに移動する 19 this.$router.push('/') 20 } 21 }, 22 },

auth.js(必要なところ以外省略しています)

javaScript

1const actions = { 2 async register(context, data) { 3 const response = await axios.post('/api/register', data) 4 } 5}

routes/api.php(必要なところ以外省略しています)

php

1Route::post('/register', 'Auth\RegisterController@register')->name('register');

RegisterController.php

php

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\User; 6use App\Http\Controllers\Controller; 7use Illuminate\Support\Facades\Hash; 8use Illuminate\Support\Facades\Validator; 9use Illuminate\Foundation\Auth\RegistersUsers; 10use Illuminate\Http\Request; 11 12class RegisterController extends Controller 13{ 14 15 use RegistersUsers; 16 17 protected $redirectTo = '/home'; 18 19 public function __construct() 20 { 21 $this->middleware('guest'); 22 } 23 24 protected function validator(array $data) 25 { 26 return Validator::make($data, [ 27 'name' => ['required', 'string', 'max:255'], 28 'email' => ['string', 'email', 'max:255'], 29 'user_id' => ['required', 'string', 'max:20', 'unique:users'], 30 'password' => ['required', 'string', 'confirmed'], 31 ]); 32 } 33 34 protected function create(array $data) 35 { 36 return User::create([ 37 'name' => $data['name'], 38 'email' => $data['email'], 39 'user_id' => $data['user_id'], 40 'password' => Hash::make($data['password']), 41 ]); 42 } 43 44 // ★ メソッド追加 45 protected function registered(Request $request, $user){ 46 return $user; 47 } 48} 49

補足情報

Laravel 5.8.28
php 7.3.0
vagrantでローカルサーバーをたちあげています。
DB mysql

auth.jsでaxios.post('/api/register', data)するまでのデータはconsole.logで確認できており、dataの中に入力データは入っています。
Controllerでデータを確認する方法がわからず、行き詰まっております。

一度会員登録が正常にできて、その後完成までたどりついた後に
会員登録だけができないことに気がつきました。
最初に成功したときに登録した会員情報でログインすることはでき、別で実装した記事追加や記事の修正などもできるので、
DBへの接続はできています。
他に必要な情報があればつけたしていきます。何卒よろしくお願いいたします。

追記

開発者ツールのNetworkで、registerのステータスコードが302になっていることに気づきました。
Status Code: 302 Found
下記と同じような状況なのかなと思ったのですが、いまいち原因と解決策がわからずでした・・・。
https://laracasts.com/discuss/channels/laravel/status-302-when-submitting-form

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

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

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

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

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

guest

回答2

0

自己解決

自己解決しました。

原因は、ミドルウェアの下記部分でした。

app/Http/Middleware/RedirectIfAuthenticated.php

php

1 public function handle($request, Closure $next, $guard = null) 2 { 3 if (Auth::guard($guard)->check()) { 4 // return redirect('/home'); 5 return redirect()->route('user'); 6 } 7 return $next($request); 8 }

そもそもこのユーザー登録を実装するにあたって参考にしたのがこのサイトで、
https://www.hypertextcandy.com/vue-laravel-tutorial-authentication-part-4/

php

1return redirect()->route('user');

の部分もそれにならってやっていました・・・が

この参考サイトの場合、「ログインしてない状態」でユーザー登録ページにアクセスすることが前提でした。
ですが私が作っていたのはユーザー登録できるのは管理者のみというのが前提で、「ログインしてる状態&ユーザーは管理者」というのが条件になってました。
ですので、製作過程でregisterとloginをvue側のコンポーネントを分けて、ログインしてる状態でregister/にアクセスするようにしました。(この段階ですでにミドルウェアの役割も、ファイルを触ったことも忘れておりました…)
そのため「ログインしてる状態でregisterにアクセス」という状況になってしまい、ミドルウェアが反応してリダイレクト処理され、302が返ってくるということになっていたようです。

ですので、とりあえず
return redirect()->route('user');
をコメントアウト(リダイレクト処理をなしに)することでユーザー登録はできるようになりました。
「ユーザー登録できるのは管理者のみ」の実装はこれからすることになるので、最終的にこの部分は変わるかもしれませんが、とりあえずこの問題は解決しましたので閉めさせていただきます。

投稿2019/10/25 12:14

編集2019/10/25 12:17
popc

総合スコア32

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

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

T5r9xysvdTHRt8b

2020/04/10 04:50

同じサイトを参考にして、同じところでつまづいていました。 とても助かりました。
popc

2020/04/10 07:55

コメントありがとうございます。 お役に立てたようでよかったです。
guest

0

Controllerでデータを確認する方法がわからず

AjaxなどでPure PHPの場合で確認するのもケースとしては同じかと思いますが、
ログ出力してください。

投稿2019/10/20 12:57

m.ts10806

総合スコア80850

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

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

popc

2019/10/21 11:05

ご回答いただきありがとうございます。 PHP自体初心者でログを出力できることもよく知りませんでしたので参考になりました。 RegisterController.phpの下記部分 protected function validator(array $data) { Log::debug($data); return Validator::make($data, [    〜〜 のように入れてみましたが、ログは出力されませんでした。 入れる位置が悪いのかと思い、RegistersUsers.phpの public function register(Request $request) { の中でも試してみましたが、変わりませんでした。 ログインなど、正常に動くところで試してみると、ログが出力されました。 post送信ができていないのかと思いましたが、auth.jsでpost送信したあとに返ってくるresponseは、ステータスコード200となっており、成功してるのでは・・・とも思います。 やり方がおかしいところなどあればまたご指摘頂けますと幸いです。
m.ts10806

2019/10/21 11:14

出力ログはどこを確認していますか? そもそも通っていない可能性もあるわけですが。
popc

2019/10/21 11:17

ログは、 storage/logs/のなかに「laravel-2019-10-20.log」のようなファイル名で出力されています。 (今日は21日ですがなぜか20日で出ていました) ログインやログアウトで試したものはこちらに出力されました。
m.ts10806

2019/10/21 11:21

ではやはり当該処理を通ってないようですね。 ログのファイル名についてはタイムゾーンがAsia/Tokyoではないのだと思います。
popc

2019/10/21 11:29

ありがとうございます。タイムゾーンをAsia/Tokyoにしたら現在の日時になりました。 そのようですね…。いろいろと助言いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問