laravel5.2 ガラケーでのアクセスを MiddleWare で禁止
PHP覚えるのに、ネットでぐぐりながらトライアンドエラー…な始まりだった僕は、ソースコードの文字コードを EUC-JP で書いていた。 なぜって?だってそういう風に書いてあったんだもん。
やがてアプリができてweb公開したとたん、
「携帯で見れない」
とのコメント。 うん。だってガラケーで使われると思ってなかったもん。 ログインせずにIPアドレスで個人の特定をしていたアプリで、アクセスごとにIP変わる携帯での利用されても使えないに決まってるでしょ。
…なんて思いながら一応僕の docomo ガラケーで見たら別に見ることはできる。 なんかの間違いじゃないの?とか思いながら調べたら、古い携帯ではEUC-JP使えないとか…。
今思い出してもいやんなる。よく対応したなぁ。 (その後HTML出力をSJISに、ユーザ判別はGUIDのような端末固有番号で対応しました)
ガラケーの人は通れません
いまのご時世、はっきりいってこれでいいんじゃないですか。 実装はMiddleWareを使うとできる。これは、機能の前に必ずやりたい処理とか、後にやりたい処理とかを登録できる機能ぽい。
ミドルウェアを生成
いつものやつ。
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,
],
];
これでガラケーの人は来なくなりました。