LaravelでBasic認証~全体/一部にアプリケーションから側から気軽に設定する~
- 公開:
- 更新:
- カテゴリ: PHP Laravel
- タグ: PHP,Laravel,l5-very-basic-auth,5.5,5.4,5.3,5.6,5.7
Basic認証を掛ける時は通常、Apacheやnginxなどwebサーバ側で設定を行いますが、Laravelから、いわゆるアプリケーション側からもBasic認証を設定する事が出来ます。
今回は、Basic認証パッケージ「l5-very-basic-auth」を用いて、LaravelでBasic認証を設定します。
開発環境
今回の開発環境は以下の通りです。
- CentOS 7
- Apache 2.4
- PHP 7.2/7.1
- Laravel
Laravelのバージョンについては 、5.7/5.6/5.5/5.4/5.3にて動作確認済みです。
Laravelのルートディレクトリを「laravel/」としています。
l5-very-basic-auth
l5-very-basic-auth は、Laravel用のBasic認証パッケージです。パッケージ名に「5」とついていますが、4系でも使えます。(導入・設定方法は5系と異なります)
ちなみにLaravelには標準でauth.basicが提供されていますが、データベースを必要とします。このパッケージはDBを使う事なくBasic認証を導入できるので、その点で気軽に使う事ができます。
インストール
composerでパッケージを導入していきます。laravelのルートディレクトリへ移動し、以下のコマンドを叩きます。
# Laravelのルートディレクトリへ移動
cd /path/to/laravel
# composerコマンドでパッケージのインストール
composer require olssonm/l5-very-basic-auth:5.*
# 実行結果
[demo@localhost laravel]$ composer require olssonm/l5-very-basic-auth:5.*
./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 (v5.4): Downloading (100%)
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/dusk
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: olssonm/l5-very-basic-auth
Package manifest generated successfully.
コマンド末尾、「:」コロンの後には、Laravelのバージョンに応じたパッケージのバージョンを付けます。各バージョンの指定は以下の通りです。
- 5.1/5.2 → 1.*
- 5.3 → 2.*
- 5.4/5.5/5.5/5.6/5.7 → 5.*
composer.jsonでパッケージが追加されているのが確認できます。
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
"olssonm/l5-very-basic-auth": "5.*" // ← ココ
},
サービスプロパイダーへ登録
このパッケージをサービスプロパイダーへ登録します。
- laravel/config/app.php
-
'providers' => [
// l5-very-basic-auth
Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider::class,
],
設定ファイル
まずは設定ファイルを生成します。下記のartisanコマンドを叩きます。
# Laravelのルートディレクトリへ移動
cd /path/to/laravel
# 設定ファイルの公開
php artisan vendor:publish --provider="Olssonm\VeryBasicAuth\VeryBasicAuthServiceProvider"
# 実行結果
[demo@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/config 配下に very_basic_auth.php が生成されます。
laravel
├─ config
| ├─ very_basic_auth.php
設定を行います。ここでBasic認証で使うユーザ名やパスワードなどを設定します。
- laravel/config/very_basic_auth.php
-
<?php
/**
* Configuration for the "HTTP Very Basic Auth"-middleware
*/
return [
// Username
'user' => 'user_name',
// Password
'password' => 'my_password',
// Environments where the middleware is active. Use "*" to protect all envs
'envs' => [
'*'
],
// Message to display if the user "opts out"/clicks "cancel"
'error_message' => 'You have to supply your credentials to access this resource.',
// Message to display in the auth dialiog in some browsers (mainly Internet Explorer).
// Realm is also used to define a "space" that should share crentials.
'realm' => 'Basic Auth',
// 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'
];
- user
- ユーザ名
- password
- パスワード
- envs
- どの環境で動作するかを設定します。デフォルトはアスタリスクで全ての環境が設定されています。環境を絞る場合は配列の形でenvファイルに記述している環境名を記述します。
-
'envs' => [
'production',
'testing',
'development',
'local'
], - error_message
- Basic認証に失敗した時に表示するメッセージ
- error_view
- エラーメッセージではなくviewを使う場合はコメントアウトを外します。
ルーティング
最後に、ルーティングを設定します。
- laravel/routes/web.php
-
Route::group(['middleware' => 'auth.very_basic'], function() {
Route::get('/', function () { return view('welcome'); });
});
Basic認証を掛けたいルーティングをこの中に入れる事で対象とします。
動作確認
ブラウザからアクセスしてみます。
ダイアログが出力され、Basic認証がかかっている事が確認できました。
まとめ
以上で作業は完了です。このパッケージの良いところは、サーバやDBの設定が不要で、気軽にベーシック認証を導入できるところです。 また、ベーシック認証の導入箇所を自由にルーティングできる事から、使い勝手も良く、便利です。 laravelの最新バージョンにも素早く対応しているので、これからずっと使えるパッケージです。気軽に導入出来て便利なので、是非試してみてください。