2017-06-02 5 views
2

私はLaravel 5.4.23で遊んでいましたが、auth(),auth()->check(),auth()->user()という404ページをヒットしたときにこのシナリオを遭遇しました。これらは初期化されていないため、その近くのどこでも。例外の場合のauth()メソッドnull

私もいくつかのテスト、私は私には0理にかなって、ログインしていても、boot方法でのNULL

dd(auth()->check()); 

リターンを、行うためにAppServiceProvider.phpクラスに行ってきました。

これは、ユーザーが404ページにアクセスするたびに、navbarsなどはユーザーデータをレンダリングしません。伝統的には、ここでのようにnavoverの右上にユーザープロファイルボタンがありますLaravelでは、これは私が見ているものでは不可能です。

私は正しいトラックにいるのですか、何か不足していますか?

Laravelがリクエストを完了した後にユーザーをログインしようとしているように見えます。

希望私はここで答えを見つける。

ありがとうございました。

UPDATE:アプリケーション\プロバイダーでboot方法で手動ログイン試行を含む

AppServiceProviderはAUT()コマンドでヌル問題を解決するように見えたが、私は、これは、ユーザーがログインしようと考えている\ 1ページあたり2回のリクエストで、明らかにLaravelはブート後にログインしたユーザーを取得しているので、例外リクエストと他には何も知らない。

答えて

2

これは、セッションがwebミドルウェアグループによって初期化されるために発生します。ルートが見つからない場合、ミドルウェアは決して初期化されません。したがって、アプリケーションはセッションから認証されたユーザーを見つけることができません。

これには回避策があります。セッションとCookieミドルウェアをwebミドルウェアグループからグローバルミドルウェアに移動すると、これが解決されるようです。しかし、欠点は、アプリケーション内のすべての単一ルートでセッションとCookieがデフォルトで有効になっていることです。これは、apiルートがある場合に問題になる可能性があります。

MOVE(コピーしない)webミドルウェア・グループ($middlewareGroups)からグローバルミドルウェアリストにこれらのルート($middleware)。

\App\Http\Middleware\EncryptCookies::class, 
\Illuminate\Session\Middleware\StartSession::class, 

あなたのエラーページで自分のremember_tokenを使用してユーザーを検出しない場合はEncryptCookiesミドルウェアをスキップすることができます。

+0

これはまだAppServiceProviderでAuth :: check()がfalseを返すという問題を解決していませんが、Handlersでは動作しますがappserviceproviderでは動作しません。laravelソースコードを調べて、残りの前にAuthをロードする可能な方法 – Emad

+0

サービスプロバイダの認証ユーザーにしたいのはなぜですか? – Sandeesh

+0

私は本当にそれを必要としません、私はちょうどlaravelのソースコードをハハで混乱したいので、私は物事がどのように動作するかを把握しようとしています、あなたのソリューションは今までのところ、 laravel user here :) – Emad

関連する問題