この記事を三行にまとめると
Cake1.3から2系に乗り換える方はご用心AuthのuserScopeを使ってる方はご用心
僕のようにね
CakePHPのバージョンを1.3(1.2でも良いと思うけど)から2.3とかにアップグレードした場合。
1.3のAuthコンポーネントで「userScope」っていうのがあるんですけど、2.3だとこの書き方が違ってたりして、これをうっかり見逃すと狙い通りの挙動をしてくれないのです。僕のようにね。
あれだね。1.3から2系に移し替える時には、どこが変わってるのか、ドキュメントをちゃんと読んどけっつー話だよね。そういうのサボるから、こんなことになるっつー話だよね。僕のようにね。
そんな場合は、こんな風に書くことになると思います。
こう書いとくと、ログイン認証時、データベースからユーザーデータを取得してくるとき、SQLのWHEREに「status = 1」ってのが追加されます。
うん、まあ、特に問題はないっすよね。
でもこのままCake2.3に乗り換えると、よろしくない。statusが1以外のユーザーの認証が通っちゃう。取ってきてはいけないユーザーデータを取ってきてしまう。
これはログイン認証にフォームを使用する場合なんですけど、まあその辺の細かい説明は今回は省略するとして……ようは、「$this->Auth->authenticate」っていうところで、ひとまとめに設定事項を書く感じですね。
その他にも、ログイン認証に使うモデルを指定するuserModelとかも、1.3のときは「$this->Auth->userModel = ‘User’」とか書いてたのを、2.3ではやっぱり「$this->Auth->authenticate」の中にまとめて記述する感じですね。
いつもながら些細なことなんですけどね。でもちりも積もれば何とやらって言いますし、こういう些細なミスが積もり積もると、お客さんからどでかいクレームが来たりして、胃がキリキリと痛み出し、夜も眠れず昼寝するハメになるんですよ。
僕のようにね。
1.3のAuthコンポーネントで「userScope」っていうのがあるんですけど、2.3だとこの書き方が違ってたりして、これをうっかり見逃すと狙い通りの挙動をしてくれないのです。僕のようにね。
あれだね。1.3から2系に移し替える時には、どこが変わってるのか、ドキュメントをちゃんと読んどけっつー話だよね。そういうのサボるから、こんなことになるっつー話だよね。僕のようにね。
1.3のuserScope
例えば……ログイン認証に使うフィールドが「username」と「password」で、その他に、「status」っていうフィールドの値が1のユーザーだけログインできるようにする。そんな場合は、こんな風に書くことになると思います。
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
$this->Auth->userScope = array('status' => 1);
こう書いとくと、ログイン認証時、データベースからユーザーデータを取得してくるとき、SQLのWHEREに「status = 1」ってのが追加されます。
うん、まあ、特に問題はないっすよね。
でもこのままCake2.3に乗り換えると、よろしくない。statusが1以外のユーザーの認証が通っちゃう。取ってきてはいけないユーザーデータを取ってきてしまう。
2.3のuserScope
じゃあどう書くかってことなんですけど、手っ取り早く結論だけ言うと、こう↓$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'email', 'password' => 'password'),
'scope' => array('status' => 1),
),
);
これはログイン認証にフォームを使用する場合なんですけど、まあその辺の細かい説明は今回は省略するとして……ようは、「$this->Auth->authenticate」っていうところで、ひとまとめに設定事項を書く感じですね。
その他にも、ログイン認証に使うモデルを指定するuserModelとかも、1.3のときは「$this->Auth->userModel = ‘User’」とか書いてたのを、2.3ではやっぱり「$this->Auth->authenticate」の中にまとめて記述する感じですね。
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'email', 'password' => 'password'),
'scope' => array('status' => 1),
'userModel' => 'User',
),
);
いつもながら些細なことなんですけどね。でもちりも積もれば何とやらって言いますし、こういう些細なミスが積もり積もると、お客さんからどでかいクレームが来たりして、胃がキリキリと痛み出し、夜も眠れず昼寝するハメになるんですよ。
僕のようにね。