laravel5.2 ガラケーでのアクセスを MiddleWare で禁止

IEガラケーにはいい思い出がない。

PHP覚えるのに、ネットでぐぐりながらトライアンドエラー…な始まりだった僕は、ソースコード文字コードEUC-JP で書いていた。 なぜって?だってそういう風に書いてあったんだもん。

やがてアプリができてweb公開したとたん、

「携帯で見れない」

とのコメント。 うん。だってガラケーで使われると思ってなかったもん。 ログインせずにIPアドレスで個人の特定をしていたアプリで、アクセスごとにIP変わる携帯での利用されても使えないに決まってるでしょ。

…なんて思いながら一応僕の docomo ガラケーで見たら別に見ることはできる。 なんかの間違いじゃないの?とか思いながら調べたら、古い携帯ではEUC-JP使えないとか…。

今思い出してもいやんなる。よく対応したなぁ。 (その後HTML出力をSJISに、ユーザ判別はGUIDのような端末固有番号で対応しました)

ガラケーの人は通れません

いまのご時世、はっきりいってこれでいいんじゃないですか。 実装はMiddleWareを使うとできる。これは、機能の前に必ずやりたい処理とか、後にやりたい処理とかを登録できる機能ぽい。

HTTPミドルウェア 5.1 Laravel

ミドルウェアを生成

いつものやつ。

php artisan make:middleware FeatureCheckMiddleware

これで app/Http/Middleware の下に生成されます。

<?php

namespace App\Http\Middleware;

use Closure;

class FeatureCheckMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $agent = $request->server->get('HTTP_USER_AGENT');
        if (!$this->isFeature($agent)) {
            die('ガラケーお断り');
        }

        return $next($request);
    }

    private function isFeature($agent)
    {
        if (preg_match('/^DoCoMo/i', $agent) ||
            preg_match('/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i', $agent) ||
            preg_match('/^KDDI\-/i', $agent) || preg_match('/UP\.Browser/i', $agent) ||
            preg_match('/ASTEL/', $agent) || preg_match('/DDIPOCKET/', $agent))
        {
            return false;
        }
        return true;

    }
}

handleメソッド

return $next($request);

の前に記述すると、コントローラに行く前、あとに記述すると一連の処理後、に処理が行われるみたいです。 今回はユーザエージェントをコントローラに行く前にチェック!ガラケーは帰ってください!

カーネルに登録

全部のページアクセスでチェックしたいから、カーネルに登録。

Kernel.php

    protected $middlewareGroups = [
        'web' => [

            \App\Http\Middleware\FeatureCheckMiddleware::class,

        ],

    ];

これでガラケーの人は来なくなりました。