Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Laravel5.6でパッケージを利用して簡単に4桁数字認証を実装

More than 3 years have passed since last update.

4桁認証機能をパッケージを使って実装

2段階認証などで、実装する機会がありそうな4桁数字認証機能を
Laravelで簡単に実装出来そうだったので試してみました。

参考

Laravel Newsの記事
4桁認証機能パッケージのgithub

環境

PHP 7.1.7
Laravel 5.6.5

 準備

githubに書いてある通りにやりました。

まずはcomposerでパッケージを入れます。

composer require larsjanssen6/underconstruction

コンフィグに追加します。

config/app.php
'providers' => [
    // ...
    'LarsJanssen\UnderConstruction\UnderConstructionServiceProvider'
];

カーネルにも追加します。認証系の機能なのでrouteMiddlewareに設定

app/Http/Kernel.php
protected $routeMiddleware = [
  // ...
  'under-construction' => \LarsJanssen\UnderConstruction\UnderConstruction::class,
];

パッケージの設定をファイルに切り出すのに便利なpublishを使います。

php artisan vendor:publish

# 適切なものを選択

php artisan vendor:publish --provider="LarsJanssen\UnderConstruction\UnderConstructionServiceProvider"

設定

以下設定用ファイル

under-construction.php
<?php

return [

    /*
     * Activate under construction mode.
     */
    'enabled' => env('UNDER_CONSTRUCTION_ENABLED', true),

    /*
     * Hash for the current pin code
     */
    'hash' => env('UNDER_CONSTRUCTION_HASH', null),

    /*
     * Under construction title.
     */
    'title' => 'Under Construction',

    /*
     * Back button translation.
     */
    'back-button' => 'back',

    /*
     * Show button translation.
     */
    'show-button' => 'show',

    /*
     * Hide button translation.
     */
    'hide-button' => 'hide',

    /*
     * Redirect url after a successful login.
     */
    'redirect-url' => '/',

    /*
     * Enable throttle (max login attempts).
     */
    'throttle' => true,

    /*
    |--------------------------------------------------------------------------
    | Throttle settings (only when throttle is true)
    |--------------------------------------------------------------------------
    |
    */

    /*
     * Set the maximum number of attempts to allow.
     */
    'max_attempts' => 3,

    /*
     * Show attempts left.
     */
    'show_attempts_left' => true,

    /*
     * Attempts left message.
     */
    'attempts_message' => 'Attempts left: %i',

    /*
     * Too many attempts message.
     */
    'seconds_message' => 'Too many attempts please try again in %i seconds.',

    /*
     * Set the number of minutes to disable login.
     */
    'decay_minutes' => 5,
];

enableで機能を使うか設定出来る。
hashで認証キーのHASH値の元ネタを指定。
max_attemptsで失敗回数設定
decay_minutesで再度入力出来るまでの時間を設定
・他にもレイアウト指定などがある

以下ルーティング例

routes/web.php
Route::group(['middleware' => 'under-construction'], function () {
    Route::get('/', function () {
        return view('welcome');
    });

    Route::get('/live-site', function() {
        echo 'content!';
    });
});

設定コマンド

以下のコマンドで特定の4桁を認証数値に設定出来ます。.envにHASH値が記入されます。

php artisan code:set 1234

確認

出ました!

スクリーンショット 2018-02-26 2.25.27.png

失敗するとattempts_messageのメッセージが出ます。
スクリーンショット 2018-02-26 2.26.00.png

3回失敗するとseconds_messageのメッセージでカウントダウンが始まります。

スクリーンショット 2018-02-26 2.26.15.png

感想

ここまでは簡単に実装できました。
あとは認証キーをユーザーごとに持たせたり、都度生成できるようにカスタマイズすれば
実際のサービスで使えるレベルになるかなぁという感じでした。

itpropartners
「一歩踏み出す覚悟がある限り、人はいつでも何度でも、新しい人生を始めることができる」という信念のもと、「自立した人材を増やし、人生の幸福度を高める。」をビジョンに、サービスを展開しているHajimariのエンジニアチームのOrganizationです。
https://hajimari.inc
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away