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

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

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

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

Q&A

解決済

1回答

5758閲覧

laravelのログイン認証失敗時のメッセージが表示されなくなってしまった

bigbox267

総合スコア31

Laravel

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

0グッド

0クリップ

投稿2020/06/27 11:06

編集2020/06/28 09:50

前提・実現したいこと

laravelのログイン認証失敗時のメッセージが表示されなくなってしまった。

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

laravelの通常のログイン認証で認証に失敗したときにエラーメッセージが表示されなくなってしまいました。

該当のソースコード

PHP

1@extends('layouts.app') 2 3@section('content') 4<div class="container"> 5 @if ($errors->any()) 6 <div class="alert alert-danger"> 7 <ul> 8 @foreach ($errors->all() as $error) 9 <li>{{ $error }}</li> 10 @endforeach 11 </ul> 12 </div> 13 @endif 14 <div class="row justify-content-center"> 15 <div class="col-md-8"> 16 <div class="card"> 17 <div class="card-header">{{ __('Register') }}</div> 18 19 <div class="card-body"> 20 <form method="POST" action="{{ route('register') }}"> 21 @csrf 22 23 <div class="form-group row"> 24 <label for="screen_name" class="col-md-4 col-form-label text-md-right">{{ __('Account Name') }}</label> 25 26 <div class="col-md-6"> 27 <input id="screen_name" type="screen_name" class="form-control{{ $errors->has('screen_name') ? ' is-invalid' : '' }}" name="screen_name" value="{{ old('screen_name') }}" required> 28 29 <!--@if ($errors->has('screen_name')) 30 <span class="invalid-feedback" role="alert"> 31 <strong>{{ $errors->first('screen_name') }}</strong> 32 </span> 33 @endif--> 34 </div> 35 </div> 36 37 <div class="form-group row"> 38 <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label> 39 40 <div class="col-md-6"> 41 <input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus> 42 43 <!--@if ($errors->has('name')) 44 <span class="invalid-feedback" role="alert"> 45 <strong>{{ $errors->first('name') }}</strong> 46 </span> 47 @endif--> 48 </div> 49 </div> 50 51 <div class="form-group row"> 52 <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> 53 54 <div class="col-md-6"> 55 <input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required> 56 57 <!--@if ($errors->has('email')) 58 <span class="invalid-feedback" role="alert"> 59 <strong>{{ $errors->first('email') }}</strong> 60 </span> 61 @endif--> 62 </div> 63 </div> 64 65 <div class="form-group row"> 66 <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> 67 68 <div class="col-md-6"> 69 <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required> 70 71 <!--@if ($errors->has('password')) 72 <span class="invalid-feedback" role="alert"> 73 <strong>{{ $errors->first('password') }}</strong> 74 </span> 75 @endif--> 76 </div> 77 </div> 78 79 <div class="form-group row"> 80 <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label> 81 82 <div class="col-md-6"> 83 <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required> 84 </div> 85 </div> 86 87 <div class="form-group row mb-0"> 88 <div class="col-md-6 offset-md-4"> 89 <button type="submit" class="btn btn-primary"> 90 {{ __('Register') }} 91 </button> 92 </div> 93 </div> 94 </form> 95 </div> 96 </div> 97 </div> 98 </div> 99</div> 100@endsection

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; 10 11class RegisterController extends Controller 12{ 13 14 use RegistersUsers; 15 16 /** 17 * Where to redirect users after registration. 18 * 19 * @var string 20 */ 21 protected $redirectTo = '/home'; 22 23 /** 24 * Create a new controller instance. 25 * 26 * @return void 27 */ 28 public function __construct() 29 { 30 $this->middleware('guest'); 31 } 32 33 /** 34 * Get a validator for an incoming registration request. 35 * 36 * @param array $data 37 * @return \Illuminate\Contracts\Validation\Validator 38 */ 39 protected function validator(array $data) 40 { 41 return Validator::make($data, [ 42 'screen_name' => ['required', 'string', 'max:255', 'unique:users'], 43 'name' => ['required', 'string', 'max:255'], 44 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 45 'password' => ['required', 'string', 'min:6', 'confirmed'], 46 ]); 47 } 48 49 /** 50 * Create a new user instance after a valid registration. 51 * 52 * @param array $data 53 * @return \App\User 54 */ 55 protected function create(array $data) 56 { 57 return User::create([ 58 'screen_name' => $data['screen_name'], 59 'name' => $data['name'], 60 'email' => $data['email'], 61 'password' => Hash::make($data['password']), 62 ]); 63 } 64} 65

試したこと

試しにこのように変更してみたのですが特に変化はなく、$errors自体を受け取れていないのだと思いますがその原因がわかりませんでした。

php

1<!--@if ($errors->any())--> 2 <div class="alert alert-danger"> 3 <ul> 4 @foreach ($errors->all() as $error) 5 <li>{{ $error }}</li> 6 @endforeach 7 </ul> 8 </div> 9<!--@endif-->

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

laravel 5.7

追記
このようにすると

php

1protected function validator(array $data) 2 { 3 4 $validate = Validator::make($data, [ 5 'screen_name' => ['required', 'string', 'max:255', 'unique:users'], 6 'name' => ['required', 'string', 'max:255'], 7 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 8 'password' => ['required', 'string', 'min:6', 'confirmed'], 9 ]); 10 11 dd($validat->errors()->all()); 12 13 return $validate; 14 }
array:3 [▼ 0 => "The メールアドレス must be a valid email address." 1 => "The パスワード must be at least 6 characters." 2 => "The パスワード confirmation does not match." ]

このような結果が出ます

trait RegistersUsersをこのように変更しましたが、エラー内容は空のままでした。また、back()を使用しているのにフォームの内容は空になります。view側ではoldを記載済みです。
追記

php

1 2/*trait RegistersUsers*/ 3public function register(Request $request) 4 { 5 6 $validate = $this->validator($request->all()); 7 8 if ($validate->fails()) { 9 //dd($validate->errors()); 10 return redirect()->back()->withInput()->withErrors( $validate ); 11 } 12 13 14 event(new Registered($user = $this->create($request->all()))); 15 16 $this->guard()->login($user); 17 18 if ($response = $this->registered($request, $user)) { 19 return $response; 20 } 21 22 return $request->wantsJson() 23 ? new Response('', 201) 24 : redirect($this->redirectPath()); 25 26 }

追記

php

1//kernel.php 2protected $middlewareGroups = [ 3 'web' => [ 4 \App\Http\Middleware\EncryptCookies::class, 5 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 6 \Illuminate\Session\Middleware\StartSession::class, 7 \Illuminate\Session\Middleware\AuthenticateSession::class, 8 \Illuminate\View\Middleware\ShareErrorsFromSession::class,//記載されている 9 \App\Http\Middleware\VerifyCsrfToken::class, 10 \Illuminate\Routing\Middleware\SubstituteBindings::class, 11 ], 12 13 'api' => [ 14 'throttle:60,1', 15 'bindings', 16 ], 17 ];

route:listはこのようになります。

list

1| | GET|HEAD | register | register | App\Http\Controllers\Auth\RegisterController@showRegistrationForm | web,guest | 2| | POST | register | | App\Http\Controllers\Auth\RegisterController@register | web,guest |

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

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

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

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

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

m.ts10806

2020/06/27 11:23

$errorsをデバッグで内容確かめてください。
bigbox267

2020/06/27 11:33

googleの検証でみるということでしょうか? コンソールなどに特にエラーは出ていなかったです。
m.ts10806

2020/06/27 11:37

PHPコードとしてのデバッグですよ。 デバッガを使うか、Laravelならdd() またはdump()
bigbox267

2020/06/27 12:10

@if ($errors->any()) <div class="alert alert-danger"> <ul> @dd($errors->any()); @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif このように記載したのですが、if文の中が実行されないので( $errors->any() )自体が帰ってきていないように思います。 if文の外でdd( $errors )とした場合 Illuminate\Support\ViewErrorBag {#255 ▼ #bags: [] } と出力されます。 dd( $errors->any() )とした場合は [] のみ出力されます。
guest

回答1

0

自己解決

https://bamboo-yujiro.hatenablog.com/entry/2017/09/21/130647

こちらのサイトが参考になりました。

$middlewareGroupsの

\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,

こちらをコメントアウト

php

1<?php 2//kernel.php 3namespace App\Http; 4 5use Illuminate\Foundation\Http\Kernel as HttpKernel; 6 7class Kernel extends HttpKernel 8{ 9 /** 10 * The application's global HTTP middleware stack. 11 * 12 * These middleware are run during every request to your application. 13 * 14 * @var array 15 */ 16 protected $middleware = [ 17 \App\Http\Middleware\CheckForMaintenanceMode::class, 18 \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 19 \App\Http\Middleware\TrimStrings::class, 20 \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 21 \App\Http\Middleware\TrustProxies::class, 22 \Illuminate\Session\Middleware\StartSession::class, 23 \Illuminate\View\Middleware\ShareErrorsFromSession::class, 24 ]; 25 26 /** 27 * The application's route middleware groups. 28 * 29 * @var array 30 */ 31 protected $middlewareGroups = [ 32 'web' => [ 33 \App\Http\Middleware\EncryptCookies::class, 34 \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 35 //\Illuminate\Session\Middleware\StartSession::class, 36 \Illuminate\Session\Middleware\AuthenticateSession::class, 37 //\Illuminate\View\Middleware\ShareErrorsFromSession::class, 38 \App\Http\Middleware\VerifyCsrfToken::class, 39 \Illuminate\Routing\Middleware\SubstituteBindings::class, 40 ], 41 42 'api' => [ 43 'throttle:60,1', 44 'bindings', 45 ], 46 ]; 47 48 /** 49 * The application's route middleware. 50 * 51 * These middleware may be assigned to groups or used individually. 52 * 53 * @var array 54 */ 55 protected $routeMiddleware = [ 56 'auth' => \App\Http\Middleware\Authenticate::class, 57 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 58 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 59 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 60 'can' => \Illuminate\Auth\Middleware\Authorize::class, 61 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 62 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 63 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 64 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 65 ]; 66 67 /** 68 * The priority-sorted list of middleware. 69 * 70 * This forces non-global middleware to always be in the given order. 71 * 72 * @var array 73 */ 74 protected $middlewarePriority = [ 75 \Illuminate\Session\Middleware\StartSession::class, 76 \Illuminate\View\Middleware\ShareErrorsFromSession::class, 77 \App\Http\Middleware\Authenticate::class, 78 \Illuminate\Session\Middleware\AuthenticateSession::class, 79 \Illuminate\Routing\Middleware\SubstituteBindings::class, 80 \Illuminate\Auth\Middleware\Authorize::class, 81 ]; 82} 83

投稿2020/06/28 13:02

bigbox267

総合スコア31

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問