Auth のあれこれ [cakePHP]
cakePHP1.3
Auth コンポーネントでいろいろハマッた。
どこでどうハマったかというと、
Auth のモデルを「User」以外のモノにする場合。
Authコンポーネントを使って、ACLを使わずに、
管理者とユーザーを使い分けた。
これが出来るのは、
管理者ページとユーザーページが完全に切り分けられているからで、
お客向けページの時にはAuthでつかうモデルをCustomerとし、
管理者向けページの時にはモデルをAdminにするみたいな感じ。
つまり、
お客向けページ:
$this->Auth->userModel = "Customer";
管理者向けページ:
$this->Auth->userModel = "Admin";
をそれぞれ
function beforeFilter(){
}
に書いておく事でOK。
のはずだったんだが、なんか上手く行かなくて。
Adminが実は予約語なんじゃないか?と疑ってみたり、
POSTした情報をアクション内でdumpしたら、passwordがnullになってて、
これが原因で認証されないのか?!などと疑ってみたが、Authのメソッド読んでもピント来ず。
よくよく考えたらこれはセキュリティーをふまえたAuthの仕様では?と気づいてみたり。。。
最終的に、原因は??
モデルの頭文字は必ず大文字で!
とか、そういう事だったりする。多分(T_T)
$this->Auth->userModel = "admin";
こうなったり
$this->Auth->userModel = "Admins";
こうなったりしてたんだね。
モデルは「s」とか大文字とかごっちゃになるが、
しかし、そこ間違えててもAuthのばあいエラーにならないみたいなんですよね。多分(T_T)
正直、いろいろやり過ぎて、
最終的にこれが原因だったのかどうか?自分でもよくわからない。
あとは、Authはハッシュに関して。
Security::hash()
ってのが有るが、これで作ったハッシュと、
$this->Auth->pasword()
で作ったハッシュは別物になるらしい。
ユーザー登録の時、メール認証などをかましてやる時に、
新規ユーザー登録のページに関しては認証掛ける必要も無いし、、
Authコンポーネントを読み込んでなかったので、
代わりに前者のSecurityクラスを使ったわけだが、それが失敗。
当然といえば当然なのかも?
だけど両方とも「sha1」でのハッシュ化だから同じになると思ったんだけどなぁ。
ちょっと違うんだろうな。。。
覚えとかなきゃ。
今回のお仕事でハマりそうなのはあと1〜2ヶ所。
そっちは javascriptとPHPの絡み。
早くこういうハマりポイント抜け出して、デザインの方やりたいわ。。
Auth コンポーネントでいろいろハマッた。
どこでどうハマったかというと、
Auth のモデルを「User」以外のモノにする場合。
Authコンポーネントを使って、ACLを使わずに、
管理者とユーザーを使い分けた。
これが出来るのは、
管理者ページとユーザーページが完全に切り分けられているからで、
お客向けページの時にはAuthでつかうモデルをCustomerとし、
管理者向けページの時にはモデルをAdminにするみたいな感じ。
つまり、
お客向けページ:
$this->Auth->userModel = "Customer";
管理者向けページ:
$this->Auth->userModel = "Admin";
をそれぞれ
function beforeFilter(){
}
に書いておく事でOK。
のはずだったんだが、なんか上手く行かなくて。
Adminが実は予約語なんじゃないか?と疑ってみたり、
POSTした情報をアクション内でdumpしたら、passwordがnullになってて、
これが原因で認証されないのか?!などと疑ってみたが、Authのメソッド読んでもピント来ず。
よくよく考えたらこれはセキュリティーをふまえたAuthの仕様では?と気づいてみたり。。。
最終的に、原因は??
モデルの頭文字は必ず大文字で!
とか、そういう事だったりする。多分(T_T)
$this->Auth->userModel = "admin";
こうなったり
$this->Auth->userModel = "Admins";
こうなったりしてたんだね。
モデルは「s」とか大文字とかごっちゃになるが、
しかし、そこ間違えててもAuthのばあいエラーにならないみたいなんですよね。多分(T_T)
正直、いろいろやり過ぎて、
最終的にこれが原因だったのかどうか?自分でもよくわからない。
あとは、Authはハッシュに関して。
Security::hash()
ってのが有るが、これで作ったハッシュと、
$this->Auth->pasword()
で作ったハッシュは別物になるらしい。
ユーザー登録の時、メール認証などをかましてやる時に、
新規ユーザー登録のページに関しては認証掛ける必要も無いし、、
Authコンポーネントを読み込んでなかったので、
代わりに前者のSecurityクラスを使ったわけだが、それが失敗。
当然といえば当然なのかも?
だけど両方とも「sha1」でのハッシュ化だから同じになると思ったんだけどなぁ。
ちょっと違うんだろうな。。。
覚えとかなきゃ。
今回のお仕事でハマりそうなのはあと1〜2ヶ所。
そっちは javascriptとPHPの絡み。
早くこういうハマりポイント抜け出して、デザインの方やりたいわ。。
コメント 0