2022/02/27
以前、Laravel5でベーシック認証を作成したのですが、Laravel6では使えなくなりました。
ただ、Laravel6ではデフォルトでベーシック認証が用意されているので、今回はそちらを使ってみます。
デモ
デモサイト
【ベーシック認証】id:test@example.com / pass: testtest
手順
1.ログイン認証機能の作成
ベーシック認証を通すアカウントとパスワードはDBテーブルの usersテーブル のレコードになります。
デフォルトでusersテーブルを生成するマイグレーションファイルがあるので php artisan migrate
コマンドを実行すると生成されます。
ただ、ベーシック認証用のレコードを挿入する必要があるので、今回はログイン認証機能を作成することにします。(※シーダーで挿入してもOK)
Laravel6のログイン機能の作成は以前にエントリーしましたので、作成されていない方は以下をご参考ください。
2.ベーシック認証用のレコードを作成
Laravelのartisanコマンドで自動生成したログイン認証画面で、ベーシック認証用のユーザーを新規登録
アカウント:test@example.com
パスワード:testtest
3.テストページの作成
ルーティングファイルの作成
Route::get('/test', 'TestController@view');
コントローラー作成
artisanコマンドでスケルトンを作成。
php artisan make:controllre TestController
自動生成されたコントローラに中身を入れていきます。
コントローラで use Illuminate\Http\Response;
を書いてレスポンスクラスを使えるようにします。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response; //追記
class TestController extends Controller
{
public function view (Request $request, Response $response)
{
return view('test');
}
}
ビューの作成
resources\views\test.blade.php
を作成して、デモのHTMLページを作成します。
BootStrap4 スタートアップテンプレートを使いました。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Basic認証テスト</title>
<!--Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<!--Font Awesome5-->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
<!--自作CSS -->
<style type="text/css">
<!--
/*ここに調整CSS記述*/
-->
</style>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-light navbar-dark bg-dark">
<a class="navbar-brand" href="#!">Basic認証テスト</a>
</nav>
<!-- Page Content -->
<div class="container mt-5 text-center p-lg-5 bg-light">
<!--Bootstrapコンポーネントを記述していく-->
<p>Basic認証テスト</p>
</div><!-- /container -->
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" ></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" ></script>
</body>
</html>
4.htaccessを改修
自分の場合、WebサーバーにApacheを使っているので Laravelのプロジェクト直下にある.htaccess
に以下を追記します。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
# FastCGIでベーシック認証を使うために以下を追記
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
5.ルーティングファイルに認証をかける
ルーティングファイルに記述したURIに以下のようにミドルウェアで認証をかけます。
Route::group(['prefix' => 'auth','middleware' => 'auth.basic'], function() {
Route::get('/test', 'TestController@view');
});
Route::get('auth/test', 'TestController@view')->middleware('auth.basic');
6.動作確認
http://localhost/auth/test
にアクセス。
以下のように認証画面が表示されればOKです。
usersテーブルのemailカラムとパスワードカラムを入力してみます。
先ほどベーシック認証用のアカウントを作成したので、それを入力してみます。
アカウント:test@example.com
パスワード:testtest
以下のようにベーシック認証を通過したらOKです。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。