CakePHP2.x系AuthComponentのマニュアルをテキトーに翻訳してみた
CakePHP2.x系AuthComponentのマニュアルをTOEIC700点台の俺がテキトーに翻訳してみた。
新人教育用に書いた解説です。(※下書きです。)
適宜改定していきます。(※下書きです。)
【原文はこちら】
http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
※下書きです。(大事なことなのでry
##################################################
AuthComponentはなぜわかりづらいのか?
たぶんバージョンの前後で仕様が違うから…!
【Authentication】おーせんてぃけーしょん
ユーザー認証とかふつうはユーザー名とパスワードだけで十分だろJK。
CakePHPでは次の3種類の認証ができるよ。
・フォームでにんしょう!
・ベーシックなにんしょう!
・ダイジェストなにんしょう!
とはいえ、普通のウェブはフォーム認証だしデフォの設定はフォーム認証だ。
【Choosing an Authentication type】チュージングアンおーせんてぃけーしょんタイプ
ベーシックとダイジェストのち外とか知ってっか?
パスワードの扱い方のちがいくらいしかないんだけどなm9
ダイジェスト認証の方がつおい。ハッシュかけてるから。
SSLつかえない情弱さんは、ダイジェスト使っておけば間違いない。
ちな、OpenIDをお使いの場合は、CakeのCoreではむり。
【Configuring Authentication handlers】コンフィギュアリングおーせんてぃけーしょんハンドラーズ
$this->Auth->authenticate = array('Form');
複数のハンドラを使うこともできる!
$this->Auth->authenticate = array(
'Form' => array('userModel' => 'Member'),
'Basic' => array('userModel' => 'Member'),
);
????????????????????????????????????????????????????????????????????????????????????????????????????
一回だけハンドラがユーザー認証に使えるようになると、
すべての認証を例外に投げることができる。
function beforeFilter() {
$this->Auth->authenticate = array('Form');
}
public $components = array(
'Auth' => array(
'Form',
),
);
??????????????????????????????????????????????????
DRYってなんだ?
ウェット(笑)二回も書くなんて笑止千万!ドライなコードにしたい!
$this->Auth->authenticate = array(
'Form' => array('userModel' => 'Member'),
'Basic' => array('userModel' => 'Member')
);
↑これが
↓こうなる
$this->Auth->authenticate = array(
AuthComponent::ALL => array('userModel' => 'Member'),
'Form',
'Basic'
);
CoreのAuthおぶじぇくとは次の設定ができる!
$this->Auth->authenticate = array(
AuthComponent::ALL => array(
'userModel' => 'Member',
'fields' => array('username' => 'email'),
//フィールド名がデフォルトと違うときに設定(username / password)
'scope' => array('User.is_active' => 1),
//フラグとか立てたいときに使う
??????????????????????????????????????????????????
'contain' => array(),
//寒天!?
),
);
??????????
ベーシック認証を使う時だけ、他のオプションもつかえるよ!
realm / nonce / qop / opaque
【Creating Custom Authentication objects】
プラガブル?
ようはCoreのAuthにどんどん自分でカスタムパーツを付けていけるってことか。
App::uses('BaseAuthenticate', 'Controller/Component/Auth');
class OpenidAuthenticate extends BaseAuthenticate {
public function authenticate(CakeRequest $request, CakeResponse $response) {
// Do things for openid here.
}
}
Authオブジェクトは認証失敗したらfalseを返すべき!
ついでにユーザー情報も一緒に返すべき!
BaseAuthenticateつまり、デフォルトの状態で、いろいろできるで。
【Using custom authentication objects】
$this->Auth->authenticate = array(
'Openid', // app authenticate object.
'AuthBag.Combo', // plugin ...
);
【Identifying users and logging them in】
おふるのバージョンでは、function login()は書かなくてもよかった!(まじで?)
でも2.0以降は、手でかけよ。少しは外に出ろよニート野郎。
??????????????????????????????????????????????????
認証するとき、くっついてくるauthオブジェクトは
ひとつのオブジェクトが認証されたら、ほかのオブジェクトはチェックされない?
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username…'), 'default', array(), 'auth');
}
}
}
$this->Auth->login($this->request->data)
この書き方だと、ログを取るだけになるから注意な!
【Using Digest and Basic Authentication for logging in】
ここ読み飛ばしていいっすかwwww
と思ったけど、ただpost判定いらね的な話だった。
public function login() {
//post 判定(゚⊿゚)イラネ
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username…'), 'default', array(), 'auth');
}
}
クッキー🍪がおなかに残ってる間は、認証神回避〜
getUser() メソッドがStatelessで使えるで
【Creating stateless authentication systems】
getUser()メソッドをimplement できるよ、
??????????
$username = env('PHP_AUTH_USER');
$pass = env('PHP_AUTH_PW');
【Displaying auth related flash messages】
AuthのエラーをSessionで表示してくれる。そのために、Layoutにfetch()メソッドで
次のように追加しておく必要があるよん。
echo $this->Session->fetch(); //すでにある行
echo $this->Session->fetch('auth'); //←追い鰹
$this->Auth->flashを使って、エラーメッセージを定義することができるお。
設定例としては、
function beforeFilter() {
$this->Auth = array(
'flash' => array(
'element' => 'default',
'key' => 'auth',
'params' => array(),
),
'authError' => 'This error shows up with the user tried to …',
);
}
【Hashing passwords】
class User extends AppModel {
public function beforeSave($options = array()) {
if (isset($this->data['User']['password']) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['passworrd']);
}
return true;
}
}
へんなはなしだが$this->Auth->login()のときは、ハッシュかける必要がないんだ。
いろいろなAuthオブジェクトたちがパスワードにハッシュをかってにかけてくれる。
ダイジェスト認証をする時も必要ないよね。
【Hashing passwords for digest authentication】
RFCのダイジェスト認証ハッシュの標準があるからな。
ダイジェスト認証のときは
DigestAuthenticate::password()というのをつかう。
【Manually logging users in】
public function register() {
if ($this->User->save($this->request->data)) {
$id = $this->User->id;
$this->request->data['User'] = array_merge($this->request->data['User'], array('id' => $id));
$this->Auth->login($this->request->data['User']);
$this->redirect('/users/home');
}
}
【Accessing the logged in user】
AuthComponent::user()
// Use anywhere
AuthComponent::user('id')
// From inside a controller
$this->Auth->user('id');
【Logging users out】
ログアウトの便利な書き方
public function logout() {
$this->redirect($this->Auth->logout());
}