Laravel5.4ログアウトルートを除くすべての認証ルートを設定する-カスタムログアウトルート/コントローラーを使用する

J.ロビンソン

そのため、何らかの理由で、以前にこの質問に対する答えに出くわしたと思いましたが、私が生きている間、GoogleまたはStackOverflowのいずれかを介して答えを見つけることはできません。これは単なるゴム製のアヒルの質問である可能性があり、そうである場合は申し訳ありませんが、この質問がいつか同じ問題を抱えている誰かに役立つことを願っています。

Laravel5.4の新規インストールから始めていると仮定しましょう。php artisan make:authターミナルでコマンドを実行すると、認証スキャフォールディングが設定されます。/routes/web.phpファイルに次の行が表示されます。

Auth::routes();

これは素晴らしいことであり、ルートリストには、ログアウトルートを含むすべての認証ルートが定義されています。php artisan r:lダブルチェックに入力)次に、カスタムログアウトコントローラーを使用してユーザーのカスタムログアウトルートを設定します。さて、「except()」と呼ばれるリソースルートのグループにチェーンできるメソッドがあると思いましたが、私の人生の間、このメソッドに関するドキュメントには情報が見つかりませんでした。このメソッドが存在するかどうかはもちろん、何を渡すかはわかりません。

私がいることを仮定しているAuth::routes()世代は、リソースルートのよう除いメソッドを使用することができますが、私はそれを実装する方法が全くわからないんだけど?

したがって、質問は単純です。ログアウトルートを除くすべての認証ルートを含めるにはどうすればよいですか。次に、次の行を使用してログアウトルートを定義します。

Route::get('logout', 'LogoutController@userLogout')->name('logout');

これが重複したエントリである場合は申し訳ありませんが、過去1時間検索バーを使用しましたが、質問に何も答えていません。

編集:リソースルートについてさらに調査したところ、ルートにチェーンする方法ではなく、キーと値のペアを持つ配列であることがわかりました。以下のコードを参照してください(laravelドキュメントからリッピング)。

Route::resource('photo', 'PhotoController', ['except' => [
    'create', 'store', 'update', 'destroy'
]]);

ただし、配列をroutes()メソッドに渡すと(以下のコードを参照)、ログアウトルートはルートリストに残ります。ただし、php artisan r:lコマンドでエラーはスローされません

// User Authentication Routes
Auth::routes(['except' => 'logout']);

編集:よく掘り下げた後、このタイプの機能を実行することは不可能のようです。この機能を5.5で追加するように要求する問題をlaravel / frameworkgithubリポジトリに送信しました。

Laravel認証からルートを除外する

https://github.com/laravel/framework/issues/20904

ジャクルティス

ロビンソン、この答えの助けを求めてツイッター私に連絡してくれてありがとう私は実際、これは素晴らしい質問だと思います。この質問が、将来の開発者が見つけて、コミュニティで少し議論を巻き起こすために、Googleのランクを上げる方法を見つけることを願っています。

Auth::routes()コマンドを使用してログアウトルートが生成されないようにするにはどうすればよいですか?

短編小説...できません。Auth::routes()省略形を使用する場合は、オールオアナッシングタイプのコマンドです。Laravel v5.5のそのコマンドの背後にある実際のソースコードをここで表示できます(バージョン5.2以降は変更されていないと思います)。短縮コマンドの背後にある実際のコードを表示すると、['except' => 'logout']配列などのパラメーターを受け入れないことがわかります。Laravelの他のルートヘルパーコマンドを期待するようになりました。このコマンドに独自のことをさせるための隠された、文書化されていない秘密はここにはありません。ソースコードを調べると、事前に設定されたルートのリストを返す以外のことをするように設定されていないことがわかります。

文字通り、ロジック(意思決定)をまったく行わずに一連のルートを出力するだけです。このコマンドは、これらすべてのルートを自分で作成する必要がないようにするための簡単な方法です。

そうは言っても、この速記を使用しなければならない理由はありません。これらのルートはすべて自分で手動で作成できます。上でリンクしたソースコードを確認するか、実行してphp artisan r:lroute:listこれを読んでいる初心者の別の省略形)、同じ出力をルートファイルにコピーします。これにより、ルートをスキップしたり、好みに合わせて変更したりできます。

これは、省略形のコマンドなしでルートを追加する場合のルートの外観です。必ずそのコマンドを削除して、代わりに貼り付けてください。削除または変更するコマンドは、他のルートと同じように簡単に実行できます。これはLaravelのソースコードから取得したので、ルートの順序(および技術的にはコメントも)を含め、短縮コマンドが作成するものと100%まったく同じです。

// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

したがって、このコードブロックをコピーしてルートファイルに追加したい場合は、省略形Auth::routes()コマンドとまったく同じ結果が得られます(そして舞台裏で同じことを行います)これで、必要なコマンドをカスタマイズまたは削除できます。

ログアウトルートをルートに変更するにはどうすればよいGETですか?

認証スキャフォールディングルートの操作方法について説明したので、質問の背後にある肉とジャガイモに答えましょう。Laravelがデフォルトで設定する方法でGETあるPOSTリクエストとは対照的に、リクエストを介してログアウトコマンドにアクセスできるようにすることを検討しています。

簡単ですが、これを行うには2つの方法があります。

1)すべてのルートをコピーし、ログアウトルートをGETリクエストに変更します

これは非常に簡単です。Auth::routes()省略形を削除してから、上記で投稿したルートをコピーして、Auth::routes()以前と同じ場所にあるルートファイルに貼り付けます。次に、新しい認証ルートの3番目のルートで、ログアウトルートを見つけます。からRoute::post()変更し、Route::get()他のすべては同じままにします。

ルートファイルは次のようになります。これをコピーして下に貼り付けるだけで、今すぐビジネスに取り掛かることができます。

// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::get('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');

2)2番目のオプションはGETAuth::routes()速記に加えてバージョンを追加することです。

これにより、最終的にはGETPOSTリクエストの両方を介してログアウトルートにアクセスできるようになりますどちらも同じメソッドにリンクしているため、同じことを行い、同じように機能します。これでPOSTまたはGETリクエストとしてログアウトできます

このオプションの結果のコードは次のようになります。

Auth::routes();
Route::get('logout', 'Auth\LoginController@logout');

2行目から名前を省略していることに注意してください。Auth::routes()コマンドのおかげですでに名前が付けられています。したがって、名前を付け直す必要はありません。logout名前はまだかかわらず動作します。したがって<a href="{{ route('logout') }}">Logout</a>、ブレードファイルで引き続き使用でき、ルート名は、GETまたはPOSTリクエストとして使用しているかどうかに関係なく機能します

それで、あなたは、Auth::routes()速記コマンドの世界への長い曲がりくねった旅に行きます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ