Google reCAPTCHA로 로그인 인증 강화.
7976 단어 신인 프로그래머 응원인증reCAPTCHA
reCAPTCHA란?
랜덤의 질문과 그 질문에 해당되는 이미지를 사람에게 선택시키는 방법으로 로봇에 의한 대량의 투고 등 정말로 사람에 의한 액션인지를 판단하기 위한 시스템입니다.
자세한 내용은 여기를 참조하십시오.
htps //w w. 오, ぇ. 이 m/레카 pt쨩/인 t로/그리고 x. HTML
이번 테스트 환경
VirtualBox CentOS6.5 CakePHP2.8
먼저 계정을 만드세요. Google 이메일 계정이 있는 사용자는 해당 계정으로 괜찮습니다. 다음 URL을 방문하세요.
사이트 키, 보안을 만듭니다.
왼쪽 메뉴에서 'Create an API Key'를 클릭합니다.
API 키는 몇 개나 만들어지므로, ST 환경용, 프로덕션용 등으로 키를 나누는 편이 좋다고 생각합니다.
도메인 등록
Label에는 적당히 다른 API 키와 구별할 수 있는 이름으로 괜찮습니다.
Domains에는 reCAPTCHA를 표시할 사이트의 도메인 이름을 입력합니다. 이번에는 로컬에서하고 있기 때문에 로컬 IP를 입력했습니다.
저장하면 다음 화면이 표시됩니다.
사이트키와 시큐리티 키, Step1에 script와 html까지 생성되므로 이것을 그대로 카피하는 것만으로 reCAPTCHA의 클라이언트측의 처리는 끝납니다. 물론 div 태그에 option을 추가할 수 있습니다. 상세 option의 사용법은 이번 정리하려고 합니다.
recaptcha.html<html>
<head>
<title></title>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
<div class="g-recaptcha" data-sitekey="こちらに自分のサイトキーを入力"></div>
</body>
</html>
이것만으로 쉽게 reCAPTCHA가 표시됩니다.
다음은 로그인 화면을 만들어 봅시다.
기본적인 로그인 화면 등의 코드는 아래의 참고로 해 주세요.
이번은 간단하게 로그인 화면에 ID·패스워드와 reCAPTCHA를 넣어 인증이 성공했는지 실패했는지의 메시지만 표시하도록 합니다.
UsersController.php public function login() {
if ($this->request->is('post')) {
//RECAPTCHAからのResponseデータを受け取る
$recaptchaResponse = $_POST['g-recaptcha-response'];
$secretKey = "こちらに自分のセキュリティーキーを入力";
//RECAPTCHA認証確認
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$recaptchaResponse}");
$responseKeys = json_decode($response,true);
//認証に成功した場合successにtrueが入力される
if(intval($responseKeys["success"]) !== 1) {
$this->Session->setFlash('「私はロボットではありません」をチェックしてください。');
} else {
//reCAPTCHA認証に成功したらID・パスワードをチェック
if ($this->Auth->login()) {
$this->Session->setFlash('ログインに成功しました。');
} else {
$this->Session->setFlash('ユーザー名かパスワードが間違っています。');
}
}
}
}
file_get_contents에서 오류가 발생하면 다음 설정이 On인지 확인
php.ini
allow_url_fopen = On
login.ctp<?php
//reCAPTCHAのscript追加
echo $this->Html->script( 'https://www.google.com/recaptcha/api.js', array( 'inline' => false));
?>
<div class="users form">
<?php echo $this->Form->create('User'); ?>
<fieldset>
<?php echo $this->Form->input('username');
echo $this->Form->input('password');
?>
<div class="g-recaptcha" data-sitekey="自分のサイトキー"></div>
</fieldset>
<?php echo $this->Session->flash(); ?>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
이것만으로 완성입니다.
참고 사이트
Reference
이 문제에 관하여(Google reCAPTCHA로 로그인 인증 강화.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/HavenSpring/items/9760c2c410776fd02e12
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<html>
<head>
<title></title>
<script src='https://www.google.com/recaptcha/api.js'></script>
</head>
<body>
<div class="g-recaptcha" data-sitekey="こちらに自分のサイトキーを入力"></div>
</body>
</html>
public function login() {
if ($this->request->is('post')) {
//RECAPTCHAからのResponseデータを受け取る
$recaptchaResponse = $_POST['g-recaptcha-response'];
$secretKey = "こちらに自分のセキュリティーキーを入力";
//RECAPTCHA認証確認
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secretKey}&response={$recaptchaResponse}");
$responseKeys = json_decode($response,true);
//認証に成功した場合successにtrueが入力される
if(intval($responseKeys["success"]) !== 1) {
$this->Session->setFlash('「私はロボットではありません」をチェックしてください。');
} else {
//reCAPTCHA認証に成功したらID・パスワードをチェック
if ($this->Auth->login()) {
$this->Session->setFlash('ログインに成功しました。');
} else {
$this->Session->setFlash('ユーザー名かパスワードが間違っています。');
}
}
}
}
<?php
//reCAPTCHAのscript追加
echo $this->Html->script( 'https://www.google.com/recaptcha/api.js', array( 'inline' => false));
?>
<div class="users form">
<?php echo $this->Form->create('User'); ?>
<fieldset>
<?php echo $this->Form->input('username');
echo $this->Form->input('password');
?>
<div class="g-recaptcha" data-sitekey="自分のサイトキー"></div>
</fieldset>
<?php echo $this->Session->flash(); ?>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
Reference
이 문제에 관하여(Google reCAPTCHA로 로그인 인증 강화.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/HavenSpring/items/9760c2c410776fd02e12텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)