ログイン認証したユーザーだけが使えるルーティングの書き方
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
ログイン認証時のルーティングの書き方について記事にしました。
これから紹介する書き方を基本系にして、ログインだけでなく、「こういうユーザーだけ」という書き方や、常に URL の頭に特定の url を付ける(prefix)方法にも触れていきます。
書き方は何個かあるものの、一番よく見る1種類だけをピックアップしました。
⇨ 複数の middleware を指定したルーティングの書き方
環境
Laravel6
ログイン認証時のルーティングの書き方
web.php
Route::group(['middleware' => 'auth'], function () {
//この中に以前の記事で書いたルーティングのコードを書いていく
//例えば
Route::get('/user', 'UserController@index');
Route::get('/user/{id}', 'UserController@show');
});
解説
このように認証の middleware を指定するのですが、group を使うことにより、何度も記述することをしなくて済むようになります。
グループの中に書いたルーティングは、ログイン認証した人だけが使えます。
例えば、プロフィール更新であったりとか、投稿機能であったりとか、ログイン認証が必要な機能の部分(ログインしてない人に見せたくないものや、使わせたくない機能)は全部この中に入る感じになると思います。
認証の middleware に関する小話
Laravel では、認証の名前を独自に指定して、複数の種類の認証を作ることが簡単にすることができます。
マルチ認証といわれたりします。
この認証の名前を指定している場所というのが、
config/auth.php
というファイルになります。
そのファイルには、このように書いてあります。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
guards の中の、web や api のところが認証の名前となっています。
ルーティングを指定する web.php では、
auth:web
auth:api
で呼び出すことができます。
さらに、
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
このような記述があります。
これにより、['middleware' => 'auth'] が auth:web を指すということを宣言しています。
つまり、
Route::group(['middleware' => 'auth'], function () {
});
//defaultsで指定しているので、上と下は同じ
Route::group(['middleware' => 'auth:web'], function () {
});
//apiの認証は下の書き方
Route::group(['middleware' => 'auth:api'], function () {
});
という感じです。
URL の共通部分を group で書く
例えば、
Route::get('/api/user', 'UserController@index');
Route::get('/api/user/{id}', 'UserController@show');
このようなルーティングがあったとします。
「api」という部分を共通化させたいとします。
するとこのように書きます。
Route::group(['prefix' => 'api'], function(){
Route::get('/user', 'UserController@index');
Route::get('/user/{id}', 'UserController@show');
});
prefix は、英語の意味では、「接頭辞」だとか「前方につける」みたいな意味になるのですが、
この URL の前方の一部を共通化させることを、「prefix」と表現することがあるようです。ちょくちょく聞きます。
まとめ
この記事では
① ログイン認証した人だけが使えるルーティングの書き方について
② また同様の書き方で、URL の共通化(prefix)させる方法について
書きました。
今後も、できるだけ覚えることが少なくて済むように、「1個覚えれば一旦 OK」みたいな趣旨で記事を書いていきます。
わかりにくい部分や、誤字、変なことを言ってるなどという点については、Twitter の DM で教えていただければと思います。
それでは。