CakePHPでユーザ名とパスワードを変更するシェルを作る


やりたいこと

既存のユーザのユーザ名とパスワードを変更するShellを作りたい。

とある要望から既存のユーザ名とパスワードを変更する必要が出てきたので、いずれまた同じ要望が出てきて他の人が同じ問題で悩まなくていいように、折角ならShell作っとくか、ということで作りました。

環境

  • CakePHP 2.2.5

やり方

ポイントは3つです。

1.AuthComponentを読み込ませる

UpdateUserShell.php
App::uses('AuthComponent', 'Controller/Component'); //AuthComponentを読み込む

class UpdateUserShell extends AppShell {
 .
 .

これが居ないとパスワードがうまく保存出来ません。

AuthComponentの本体は

lib/Cake/Controller/Component/AuthComponent.php

ここにいるので、上記のように記述するとうまくいきました。

※ただし、Userモデルの中で読み込んでいる場合はシェルで指定する必要はありません

2.Shell からモデルを使えるようにする

UpdateUserShell.php
public $uses = array('User');

Shell からUserモデルを使えるようにするために、1文必要です。

3.パスワードは平文を指定する

UpdateUserShell.php
$this->User->id = $id;
$this->User->set(array(
    'username' => 'fuga',
    'password' => 'newPassword', //パスワードは平文を指定
));
$this->User->save();

平文で指定してやると勝手にハッシュ化してくれます。

参考