AuthComponentの改造
追記2に修正を書きました
AuthComponentのパスワード自動ハッシュ化がネックになった。
詳細はねねとまつの小部屋さんをご覧頂くとして、
※stable版では、Auth->allow()に指定すれば、Model内のvalidationを使えるようになりそうです(2008/3/17更新)
とのことであるから、AuthComponentを上記の通りに改造しちゃえというのがこのエントリーの趣旨。
まずは(もう昨日の時点でやってあるんだけど)、
/cake/libs/controller/components/auth.phpを/app/controller/components/auth.phpにコピー。
で、これを編集する。
※stableになったらapp側を消すだけでいいからね。そういうことでしょ?
Auth.phpの
$this->data = $controller->data = $this->hashPasswords($controller->data);
これを、
if ($this->allowedActions == array('*') || in_array($controller->action, $this->allowedActions)) {
return false;
}
これの後ろにもっていくだけ。
おそらく、Auth->arrowに設定されたアクションならここでリターンされちゃうんで、
その後ろに書けば最初のAuth->hashPasswordsを書けば、
Auth->arrowに指定したアクションではhashPasswordsは発動しないというわけだ!
でも、自信が無いのでおかしい点に気づいた方がいらっしゃいましたら
指摘していただけると幸いです。
って、誰も見てないでしょうけども。
追記1
上記でいいかな~と思ったら、ユーザの追加がうまくいかない。
passwordの項目をはずすとUser->saveがうまくいくので、
Auth関係であることは間違いなさそう。
原因がわかったらまた書きます。
追記2
よくわからんけど、
どうやら
$this->data = $controller->data
これが無いとsaveがうまくいかないことがわかったので、
以下のように修正(function startupね)
$this->data = $controller->data = $this->hashPasswords($controller->data);
if ($this->allowedActions == array('*') || in_array($controller->action, $this->allowedActions)) {
return false;
}
↓
if ($this->allowedActions == array('*') || in_array($controller->action, $this->allowedActions)) {
$this->data = $controller->data;
return false;
}
$this->data = $controller->data = $this->hashPasswords($controller->data);
これでようやく動くようになった..
と、いうことはですよ?
よくわかってないんだけど、
Authで指定されたモデルはAuthの$this->data経由でsaveされるってことなのかな?