web-dev-qa-db-ja.com

Laravel 5.5ログインエラーが表示されない

これが私の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の提案も試してみましたが運が悪かったです。

6
funerr

さて、数時間後、私はついにそれを見つけました! 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のラッパーを使用して、ビューに到達する前にエラーセッションを何らかの方法で切り捨てると思います。

2
funerr

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
_
4

置く、

Auth :: routers();

ミドルウェアグループ内。

Webミドルウェアがセッションを開始します。そのミドルウェアグループの外部にルートを書き込んでいる場合、セッションにアクセスすることはできません。

2
Akshay Kulkarni

Entrust(または他のパッケージ)を使用してそのクラスを$routeMiddlewareに追加する場合、問題は、後で追加されるカスタムクラスがデフォルトのLaravelクラスをオーバーライドすることに起因する可能性があります。

解決策は、カスタムクラスを$routeMiddleware配列の先頭に移動することです。

1
Melih