FuelPHPで作成したサイトでGoogleのキャプチャ認証、reCAPTCHAを使ってみたのでメモ。
こちらを参考に前準備、フロント画面の実装をしました。
https://syncer.jp/how-to-introduction-recaptcha
サーバーサイドはPHPでのサンプルが記載されていたのでこちらを参考にFuelPHPを使って書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/** * GoogleのreCAPTCHA認証の結果を返却 * * @param string $recaptcha */ public static function is_recaptcha($recaptcha) { if (!$recaptcha) { return false; } // シークレットキー $secret_key = 'シークレットキー'; $endpoint = 'https://www.google.com/recaptcha/api/siteverify'; try { // 判定結果の取得 $curl = \Request::forge($endpoint, 'curl'); $curl->add_param(['secret' => $secret_key, 'response' => $recaptcha]); $curl->set_method('get'); $curl->set_option(CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない $curl->set_option(CURLOPT_RETURNTRANSFER, true); // curl_execの結果を文字列で返す $curl->set_option(CURLOPT_TIMEOUT, 5); // タイムアウトの秒数 // 実行 $result = $curl->execute(); $response = $result->response()->__toString(); Log::debug(print_r($response, true), 'レスポンス結果'); // レスポンスを配列に変換 $res_arr = json_decode($response, true); if (isset($res_arr['success'])) { if (isset($res_arr['error-codes'])) { Log::warning(print_r($res_arr['error-codes'], true), 'エラーコード'); } return $res_arr['success']; } else { Log::warning('recaptcha api response error. '.print_r($res_arr), 'レスポンスがおかしい'); } } catch (Exception $e) { Log::error($e, '例外発生しました'); } return false; } |
ぶっちゃけcurl_initを\Request::forge($endpoint, ‘curl’);に変えてみただけになってしまっております。
使い方は
1 2 3 4 5 |
if (xxxx::is_recaptcha('g-recaptcha-response=の値')) { // 認証成功時の処理 } else { // 認証失敗時の処理 } |
です。
以外と簡単にキャプチャ認証を実装できるのでオススメです。
One comment to this article
Johng14
on 2016年8月26日 at 8:00 AM -
An fascinating dialogue is value comment. I believe that it is best to write more on this matter, it might not be a taboo topic but generally individuals are not sufficient to talk on such topics. To the next. Cheers aeakfgdedked