Laravel

ログイン認証したユーザーだけが使えるルーティングの書き方

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

ログイン認証時のルーティングの書き方について記事にしました。

これから紹介する書き方を基本系にして、ログインだけでなく、「こういうユーザーだけ」という書き方や、常に URL の頭に特定の url を付ける(prefix)方法にも触れていきます。

書き方は何個かあるものの、一番よく見る1種類だけをピックアップしました。

⇨ 以前書いた、Laravel のルーティングに関する記事

⇨ 複数の middleware を指定したルーティングの書き方

⇨Laravel のドキュメント

環境

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 で教えていただければと思います。

それでは。