Laravel6でBasic認証(Laravel標準機能)

2022/02/27

以前、Laravel5でベーシック認証を作成したのですが、Laravel6では使えなくなりました。

ただ、Laravel6ではデフォルトでベーシック認証が用意されているので、今回はそちらを使ってみます。

 

デモ

 

手順

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識