RitoLabo

laravel5で指定箇所のみ(全体にでもOK)にBasic認証を実装する

  • 公開:
  • 更新:
  • カテゴリ: PHP Laravel
  • タグ: CentOS,Laravel,composer,artisan,l5-very-basic-auth,7.2,5.5,5.4,5.3,BasicAuthentication

Basic認証パッケージ「l5-very-basic-auth」

ページの1部にだけ、もしくはアプリケーション全体にBasic認証をかけたいと思った時、Laravelではそれを実現する事が出来ます。
例えば、管理側にはベーシック認証をかけたいけど、フロント側にはかけない。のような感じです。
実装の方法はいくつかありますが、今回はDBなども不要で手軽に導入できるパッケージ「l5-very-basic-auth」を導入してみたいと思います。
本家GitHub:l5-very-basic-auth

検証環境

  • PHP 7.1
  • Laravel 5.4

今回の検証にPCのOSやサーバインフラはあまり関係ないので割愛します。上記スペックに添える構成であれば問題なく動くと思います。(laravelはバージョン5系であればどれでもOK)
それと、パッケージの導入にcomposerとartisanを使用しますので、コマンドが使える環境である事、composerをインストール済みである事が前提です。

また、コマンドはlinux(CentOS7)で叩いています。XAMPPやMAMPを使っている場合は、適宜、自身の環境用に置き換えてください。

パッケージの導入

それでは早速パッケージを導入していきます。
composer.jsonに書き込んで「composer update」を叩くのでも良いですが、今回はrequireする方法で行います。

まずは、自身のプロジェクトのlaravelディレクトリへ移動します。

cd /path/to/laravel

composerコマンドでl5-very-basic-authパッケージを導入します。

composer require olssonm/l5-very-basic-auth:3.*

コマンド末尾、「:」コロンの後には、laravelのバージョンに応じたパッケージのバージョンを付けます。
今回は、5.4に導入するので、「3.*」と付けました。
各バージョンの指定は以下の通り

  • 5.1~5.2系:1.*
  • 5.3系:2.*
  • 5.4系:3.*
  • 5.5系:4.*
[root@localhost laravel]# composer require olssonm/l5-very-basic-auth:3.*
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing olssonm/l5-very-basic-auth (3.0): Downloading (100%)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.

これでパッケージの導入が完了したので、composer.jsonを確認してみましょう。

パッケージ導入前
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/socialite": "^3.0",
"laravel/tinker": "~1.0"
},
パッケージ導入後
"require": {
"php": ">=5.6.4",
"laravel/framework": "5.4.*",
"laravel/socialite": "^3.0",
"laravel/tinker": "~1.0",
"olssonm/l5-very-basic-auth": "3.*" ココ
},

きちんと導入できている事が確認できます。

コンフィグファイルの生成

l5-very-basic-authの設定ファイルを書き出す必要があるので、下記のartisanコマンドを叩きます。もちろん、プロジェクトのlaravelルートディレクトリで実行してください。

php artisan vendor:publish --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"

そうする事で、「/vendor/olssonm/l5-very-basic-auth/src/」配下に「config.php」が生成されます。

実行結果
[root@localhost laravel]# php artisan vendor:publish --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"
Copied File [/vendor/olssonm/l5-very-basic-auth/src/config.php] To [/config/very_basic_auth.php]
Publishing complete.

おつかれさまでした。ここでコンソール側の操作は終わりです。次はいよいよ、アプリケーション側の実装を行っていきましょう。

Laravel設定

ここからはLaravelの中を実装していきます。

サービスプロパイダーへの登録

laravelディレクトリから見ると「laravel/config/」配下にapp.phpがあるので、そのファイルに先ほど追加したパッケージを追記してサービスプロパイダーへ登録します。

config/app.php
'providers' => [
.
. (省略)
.
// l5-very-basic-auth
Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider::class, 追記
.
. (省略)
.
],

設定ファイルの設定

前にartisanコマンドを叩いて出力した設定ファイルに、Basic認証で使うIDとPASSWORDを設定します。

laravel/vendor/olssonm/l5-very-basic-auth/src/config.php
<?php

/**
* Configuration for the "HTTP Very Basic Auth"-middleware
*/
return [
// Username
'user' => 'XXXXX', ここにID

// Password
'password' => 'XXXXXXXX', ここにパスワード

// Environments where the middleware is active
'envs' => [
'local',
'development',
'testing'
],

// Message to display if the user "opts out"/clicks "cancel"
'error_message' => 'You have to supply your credentials to access this resource.',

// If you prefer to use a view with your error message you can uncomment "error_view".
// This will superseed your default response message
// 'error_view' => 'very_basic_auth::default'
];

ルーティングの設定

Basic認証を設定する部分にルーティングを設定していきます。
routes/web.phpでの設定です。
以下は記述例として、フロント側にはBasic認証をかけず、管理ログイン側のみにBasic認証をかけています。
ミドルウェアとして「l5-very-basic-auth」を当て、対象のルーティングをグループで括っていく感じですね。

laravel/routes/web.php
// Basic認証をかけないフロント
Route::get('/', 'IndexController@index');

// Basic認証をかける管理側
Route::group(['middleware' => 'auth.very_basic', 'prefix' => ''], function() {
//ログイン画面
Route::get('/login', 'LoginController@form');
});

アプリケーション全体にBasic認証をかけたい場合はもちろん、全てを囲います。

ブラウザから確認

ここまでを行ったら全ての設定は完了です。 実際にブラウザから、ルーティング対象のページへアクセスしてみましょう。

Basic認証画面

きちんとBasic認証が実装されました。

このパッケージの良いところは、サーバやDBの設定が不要で、気軽にベーシック認証を導入できるところです。 また、ベーシック認証の導入箇所を自由にルーティングできる事から、使い勝手も良く、便利ですね。 laravelの最新バージョンにも素早く対応しているので、これからずっと使えるパッケージだと思います。