これが私のlogin.blade.phpです
@if(Session::get('errors')||count( $errors ) > 0)
@foreach ($errors->all() as $error)
<h1>{{ $error }}</h1>
@endforeach
@endif
これが私のLoginController.phpです:
protected function sendFailedLoginResponse(Request $request)
{
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors([
$this->username() => 'ERRORS',
]);
}
そして、これが私のweb.php(ルート)です
// I am customizing the login to do extra checks,
// but I still need the basic auth scaffolding.
Auth::routes();
...
Route::group(['middleware' => 'web'], function () {
Route::view('/login', 'auth.login');
Route::post('/login', 'Auth\LoginController@login')->name('login');
});
悪いユーザーでログインしようとするとエラーは表示されませんビューで、何が間違っていますか?
更新:
@ Seva Kalashnikovが提案したように、login.blade.phpを変更しようとしましたが、運がありませんでした。
@ AkshayKulkarniの提案も試してみましたが運が悪かったです。
さて、数時間後、私はついにそれを見つけました! Laravelプロジェクトを最初から作成し、diffを作成して原因を見つけました:
app/Http/Kernel.phpで、StartSessionミドルウェアを必ず削除してください。
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Session\Middleware\StartSession::class, // <-- Remove this
];
説明:ミドルウェアとして配置する必要があることを読んだので(web.phpでRoute::group(['middleware' =>'web']
ラッパーを使用していなかった場合)、そこにあるのを忘れたと思います。そこに置くとそして web.phpのラッパーを使用して、ビューに到達する前にエラーセッションを何らかの方法で切り捨てると思います。
Login.blade.phpのif
ステートメントからSession::get('errors')
を削除してみてください
_@if(count( $errors ) > 0)
@foreach ($errors->all() as $error)
<h1>{{ $error }}</h1>
@endforeach
@endif
_
Webミドルウェアグループによって提供されるShareErrorsFromSession
ミドルウェアは、_$error
_ビュー変数を担当するため、常に定義されます( ここにリンク )
[更新]
そして、@ Ohgodwhyが指摘したように、@if ($errors->any())
例 を使用する必要があります
したがって、あなたの場合は次のようになります。
_@if($errors->any())
@foreach ($errors->all() as $error)
<h1>{{ $error }}</h1>
@endforeach
@endif
_
置く、
Auth :: routers();
ミドルウェアグループ内。
Webミドルウェアがセッションを開始します。そのミドルウェアグループの外部にルートを書き込んでいる場合、セッションにアクセスすることはできません。
Entrust(または他のパッケージ)を使用してそのクラスを$routeMiddleware
に追加する場合、問題は、後で追加されるカスタムクラスがデフォルトのLaravelクラスをオーバーライドすることに起因する可能性があります。
解決策は、カスタムクラスを$routeMiddleware
配列の先頭に移動することです。