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());
}