【Laravel】LINEのクローラーを捕まえた

えび

LINE Messaging APIを使用してサイトからLINE通知を送った時、
プレビュー表示のためにLINEクローラーがアクセスしにきていたので
それを捕まえたお話

LINEクローラーがきたことによる問題

LINE Messaging APIを使用してサイトからLINE通知を送ると、
記載されているURLのプレビューを表示するためにLINEクローラーさんがサイトを覗きにくる

これ、ただの画面ならいくらでもどうぞという感じなのだけど…

今回LINEクローラーがアクセスしにきていたのは、「トークン認証画面

せっかくユーザーにトークン認証のURLを送っても、
ユーザーがアクセスする前にLINEクローラーがやってきてしまう
結果、ユーザーがURLを確認していないのに
自動的に認証完了になってしまうというバグが発生 (許さん…)

なのでLINEクローラーの場合は認証完了にしないように捕獲した

捕獲方法

捕獲方法は簡単、ユーザーエージェントを取得してLINEクローラーの場合の条件分岐を追加する

LINEクローラーのユーザーエージェントは
facebookexternalhit/1.1;line-poker/1.0」なのでこんな感じ

$ua = $request->header('User-Agent');
// LINEクローラーの場合は認証処理をしない
if ($ua === "facebookexternalhit/1.1;line-poker/1.0") {
    echo 'トークン認証画面';
    exit;
}

// ここから下は従来の認証処理 & 認証完了View表示