CakePHPでおそらく1番簡単にログインまわりを作る方法。 パスワードの記憶とか、色々できるよ! CakeDCのuserプラグイン。

メモ。

まぁ、なんだ。
ログインまわりって、すごい面倒だよね。

セキュリティに関わる問題がけっこうあって、例えば自動ログイン機能をつけるだけでも色々とコードを書かなくちゃならない。

トークンを発行するだけでも、
例えばユーザーIDと有効期限を引数として受けとって、内部でトークン発行して、DBに挿入、トークンを戻り値として返してもらったり。
トークンが衝突した時の処理なんかも書かなくちゃならない。

もちろんこれだけじゃダメダメなので、

セッションタイムアウトしたら、古い認証トークン破棄して、新しいの作ったり、明示的にログアウトした時の処理とか色々ゴリゴリ書かなくちゃね。

単純だけど、書くのはめんどい。ダルいね。


そこで、そんな面倒な処理を全部引き受けてくれるのが、CakeDC謹製のusersプラグインだ。



https://github.com/CakeDC/users


なんと、

仮登録メールを送って、書いてあるURLをクリックしたら本登録。
ログイン情報の保持。
パスワード再発行。
新しいユーザーの追加。

をあっという間に実装できる。


自分でログイン処理書く前に知りたかったよ……。



さぁ、使い方だ。

まず、落としてUsersにリネームして、app/Pluginに置くのはいつも通り。

ただ、これと、https://github.com/CakeDC/utils
これhttps://github.com/CakeDC/search

も必要になるみたいだから、それぞれ落としてリネーム後、同じく配置してね。


さぁ、後はスキーマ定義だ。cakePHPのコンソールを呼び出したら、

cake schema create --plugin Users --name users

みたいにすれば良いよ。





後は、仮登録メール送信する為にapp/Configのemail.phpにちょっと書いてやればおk。

Usersプラグインではデフォルト設定を呼び出すようなので、


public $default=array(
   		'transport' => 'Smtp',
		'from' => array('あなたのアドレス@yahoo.co.jp' => 'My Site'),
		'host' => 'smtp.mail.yahoo.co.jp',
		'port' => 587,
		'timeout' => 30,
		'username' => 'ヤフーname',
		'password' => 'ヤフーパスワード',
		'client' => null,
		'log' => true,
		'charset' => 'utf-8',
		'headerCharset' => 'utf-8',
	);

という感じか。sslとかは各自。もちろんデフォルトじゃなくて、各自で設定に名前つけてもおk。

あと、自動ログインを使うなら、

public function restoreLoginFromCookie() {
    $this->Cookie->name = 'Users';
    $cookie = $this->Cookie->read('rememberMe');
    if (!empty($cookie) && !$this->Auth->user()) {
        $data['User'][$this->Auth->fields['username']] = $cookie
[$this->Auth->fields['username']];
        $data['User'][$this->Auth->fields['password']] = $cookie
[$this->Auth->fields['password']];
        $this->Auth->login($data);
    }
}

をAppControllerのbeforefilterに追加すればおk.

さぁ、これで終わり。本当に終わりだ。

Gmailが個人的に嫌いなのでヤフーを使った。

あとは、各自、
https://github.com/CakeDC/users

ドキュメントを読んで色々と設定して下さい。基本的に、ルーティングとか、バリデーションとかは普通のやり方です。



便利だなぁ。