[Site] ユーザー登録機能

タグ :

作成サイト「koweboo」についてまとめるシリーズです。
今回は最も基本機能となる「ユーザー登録」についてまとめます。
(以前の投稿「[CakePHP] ログイン認証」にも似たような内容がありますが、若干違います。必要に応じて読み飛ばしてください。)

作成サイト内の関連箇所 — 「新規登録

基本仕様

登録には以下の情報を必要とします。
以下はユーザー登録画面にて入力します。

  • ユーザー名
  • メールアドレス
  • パスワード

登録後、ログイン画面にて「メールアドレス」と「パスワード」を入力すれば、ログインできるものとします。

テーブル作成

ユーザーテーブルには以下のフィールドを設けます。

[users]
フィールド名 名称 説明
id ユーザーID 主キー
username メールアドレス 入力した「メールアドレス」を保存
password パスワード 入力した「パスワード」を保存

フィールドの「username」という名前は CakePHP のログイン認証機能などで使用するため、命名規則で決められた名前らしいです。
変更することも可能ですが、そのままメールアドレスを保存するものとして使用しても問題は無いですし、めんどうなので変更しないでおきます。

また、ユーザー名は後に変更ができるデータとするため、ユーザーテーブルとは別のテーブルへ保存されるようにします。
(ユーザーテーブルにはパスワード等が保存され、セキュリティが高いテーブルとなるので、なるべくアクセスさせないようにするためです。)
別テーブルの名前テーブルには以下のフィールドを設けます。

[names]
フィールド名 名称 説明
id 名前ID 主キー
user_id ユーザーID ユーザーテーブルの主キー
name 名前 入力した「ユーザー名」を保存

基本ファイル生成

手っ取り早く作るには「Bake」です。
「users」はMVC全て Bake し、「names」はモデルのみを Bake します。
以下のファイルが生成されます。

[Model]
 - User.php
 - Name.php
[View]
 - [Users]
   - add.ctp
   - edit.ctp
   - index.ctp
   - view.ctp
[Controller]
 - UsersController.php

フォーム作成

まずは、登録フォームを作成します。
フォームはユーザーの追加登録なので、ビューの「add.ctp」を編集して使用したいと思います。
コードは以下になります。

<div class="users form";>
	<h2><?php echo __('Add User'); ?></h2>
<?php
	echo $this->Form->create('User', array(
		'url' => 'add'
	));
	echo $this->Form->input('name', array(
		'label'=>__('Name', true)
	));
	echo $this->Form->input('username', array(
		'label'=>__('E-mail', true)
	));
	echo $this->Form->input('password', array(
		'label'=>__('Password', true),
		'value'=>$user_pass
	));
	echo $this->Form->end(__('Regist', true), array(
		'div'=>false
	));
?>
</div>

以下のような表示になります。

cake_user_add_1

登録処理作成

続いてコントローラにて登録処理を作成します。
コントローラ(UsersController.php)のファンクション「add()」内へ作成します。

if($this->request->is('post')) {
	$this->request->data['User']['password'] = AuthComponent::password($this->request->data['User']['password']);
	$this->User->create();
	if ($this->User->save($this->request->data)) {
		$name = $this->request->data;
		$name['User']['id'] = $this->User->id;
		$name['Name'][0]['user_id'] = $this->User->id;
		$name['Name'][0]['name'] = $this->request->data['User']['name'];
		$this->User->saveAll($name);
		$this->Session->setFlash(__('Registered completed.'));
		$this->redirect(array('controller' => 'users', 'action' => 'login'));
	} else {
		$this->Session->setFlash(__('Could not register. Please redo.'));
		$this->set('user_pass', '');
	}
}
site_user_add_c

本来なら、名前を登録する箇所でも成功かどうかを判定する処理が必要ですが、今回は省略しました。

入力内容チェック

最後にモデルへ入力確認処理を追加しますが、ちょっと長くなるので別記事に書きます。
[Site] ユーザー登録(バリデーション)」を参照してください。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed