cakePHPでさくっと認証を作る (会員追加) recaptchaとか。
会員を追加する機能をcakePHPで作ってみませうという企画。
・目指すもの
メール、パスワードを確認のために二回入力させる。画像認証でスパムを防止する。
仮登録メールをクリックしたら、本登録完了。
(とりあえず、今回は二回入力と画像認証まで)
・準備するもの
CakePHP2.x (最新版が良いんじゃない?)
recaptchaのプラグイン https://github.com/lamanabie/cakephp-recaptcha
開発環境は各自で。
まず、ざっと書いてしまうね。
レシピ1
Viewを作る。
<div class="admin form"> <?php echo $this->Form->create('User', Array('url' => '/admin/add')); echo $this->Form->input('email'); echo $this->Form->input('メールをもう一度入力して下さいな'); echo $this->Form->input('password'); echo $this->Form->input('パスワードをもう一回入力して下さい'); echo $this->Recaptcha->display(); echo $this->Form->end('アカウントを作成する'); ?> </div>
気になる
echo $this->Recaptcha->display();
については後で言います。
レシピ2
モデルにバリデーションとか、二回チェックする関数とか書く。とりあえず、書く
<?php class User extends AppModel { public $name = 'User'; public $validate = Array( 'email' => Array( 'notempty'=>array( 'rule' =>array('notempty'), 'message' => 'メールアドレスを入力してください。', ), 'isUnique'=>array( 'rule'=>'isUnique', 'message'=>'このメールアドレスは既に使われています', ), 'email'=>array( 'rule'=>array('email',true), 'message'=>'メールアドレスの形式として不正です。 申し訳ありませんが、他のメールアドレスを記入して下さい', ), ), 'メールをもう一度入力して下さいな'=>Array( 'notempty'=>array( 'rule'=>array('notempty'), 'message'=>'入力されていません', ), 'email'=>array( 'rule'=>array('emailcorrespond'), 'message'=>'メールアドレスが一致しません', ), ), 'password' => Array( 'notempty'=>array( 'rule' => Array('notEmpty'), 'message' => 'パスワードを入力してください。', ), 'custom'=>array( 'rule'=>array('custom','/^[a-zA-Z0-9]{6,}$/i'), 'message'=>'パスワードは半角英数六文字以上で入力して下さい', ), ), 'パスワードをもう一回入力して下さい'=>array( 'notempty'=>array( 'rule'=>array('notempty'), 'message'=>'どうして入力しないの? バカなの? 死ぬの?', ), 'password'=>array( 'rule'=>array('correspond'), 'message'=>'パスワードが一致しません', ), ), public function correspond($check){ return($check['パスワードをもう一回入力して下さい'] ==$this->data['User']['password']); } public function emailcorrespond($emailcheck){ return($emailcheck['メールをもう一度入力して下さいな'] ==$this->data['User']['email']); } } ?>
レシピ3
さっき落としたこれ(https://github.com/lamanabie/cakephp-recaptcha)を解凍して、Recaptchaにリネームして、app/pluginに置く。
config/bootstrap.php
で読み込む。あと、リキャプチャのAPIとか書く
CakePlugin::load('Recaptcha',array('bootstrap'=>true)); Configure::write('Recaptcha.publicKey', 'your-public-api-key'); Configure::write('Recaptcha.privateKey', 'your-private-api-key');
こんな感じ。
レシピ4
コントローラーに色々書く
<?php (前略) //コンポーネントに追加してね。 public $components = Array( 'Recaptcha.Recaptcha'=>array('actions'=>array('add','delete')), ); (中略) public function add() { if($this->request->is('post')) { $this->User->create(); if ($this->User->save($this->data)) { $this->Session->setFlash(__('The user has been saved')); //ユーザーが追加されたら自動ログインして、マイページへと飛ばす $this->Auth->login(); $this->redirect(array('action' => 'mypage')); } else { $this->Session->setFlash(__('The user could not be saved. Please, try again.')); } } } (後も略) ?>
ざっとこんな感じ。すごい簡単ですね。
プラグインさまさまだぁ。
あとはauthコンポーネントの設定とかすれば良いだけ。
詳しくは
http://book.cakephp.org/2.0/ja/core-libraries/components/authentication.html
とか読んで下さい。
リキャプチャのAPIは(http://www.google.com/recaptcha)ここで取ってね。
最近グーグルの野郎に買われたよ。グーグル先生怖い。
Gメールも携帯番号で認証だし。個人情報がぁーーーーーーー。
特に難しいところもないかなぁと。
プラグインのおかげで
echo $this->Recaptcha->display();
たったの一行でリキャプチャ画像が出ます。
詳しいパラメータとかはプラグインの解説読んで下さい。
https://github.com/lamanabie/cakephp-recaptcha
間違ったキャプチャを入力すると、
Incorrect captchaって出ます。
正解の入れたら何も表示されずにユーザーが登録されます。
フラッシュは$this->Session->setFlash(__('ほげほげほげ'), 'default', array(), 'auth');
とか書いたらいいかもね。しらんけど。
付記・
はてなの改行がよくわからんくて、変なところで改行しております。すいません。
そろそろ別のブログサービスに移行するかな。
レシピ2の言葉がところどころ変なのは酔ってる時に書いたからです。多分。