前提・実現したいこと
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 |
PHPコードとしてのデバッグですよ。
デバッガを使うか、Laravelならdd() またはdump()
@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() )とした場合は
[]
のみ出力されます。
回答1件
あなたの回答
tips
プレビュー