今回は、ログイン機能を作りたいと思います。
「app_controller」の記述
「app_controller」の「beforeFilter()」に記述すると、すべてのコントローラーの全アクション前に実行されます。
<?php
class AppController extends Controller
{
// ログインを必須とするかどうかのフラグ
var $needAuth = false;
function beforeFilter()
{
// ユーザー画面用
if ($this->name == "Users") {
// セッションから取り出したログイン情報をセット
$auth = $this->Session->read('auth');
$this->set('auth', $auth);
// ログイン必須の機能でログインされていない場合はログイン画面へ転送
if ($this->needAuth && $this->action != 'login') {
if (empty($auth)) {
$this->redirect('/users/login/');
exit;
}
}
}
}
}
これで、各コントローラーに「var $needAuth = true;」を記述すると、そのコントローラーは全てログイン必須になります。
しかし、「ログイン画面」に適用されると無限ループになってしまうので「login」アクションだけは適用外にします。
「$this->action」←これでアクション名を取得できます。
ので、「$this->action != 'login'」を記述します。
これで、ログイン画面だけは適用外になりました。
Userモデルを作成
/app/models/user.php
<?php
class User extends AppModel
{
var $name = 'User';
}
Usersコントローラーを作成
/app/controllers/users_controller.php
<?php
class UsersController extends AppController
{
var $name = 'Users';
var $uses = array('User'); // Userモデルを使用
var $needAuth = true; // ログイン必須のフラグ
/*
* ログインページ
*/
function login()
{
// ページタイトルの設定
$this->pageTitle = 'Web-local.community「local.SNS」';
// データが送られてきたら
if (!empty($this->data)) {
// パスワードを暗号化
$this->data['User']['pwd'] = md5($this->data['User']['pwd']);
// 入力された[id]と[pwd]がデータベースにある場合のみ[$user_data]に値が入る
$user_data = $this->User->findByEmailAndPwd($this->data['User']['email'], $this->data['User']['pwd']);
// [$user_data]が空じゃなければ
if (!empty($user_data)) {
// 値をセッションに格納
$this->Session->write('auth', $user_data['User']);
// リダイレクトする
$this->redirect('/users/home');
exit;
} else { // [$user_data]が空ならログイン画面へ
// エラーメッセージをビューに渡す
$this->set('login_error', 'ログインできませんでした・・・');
// ログイン画面の呼出
$this->render('login');
}
}
}
/*
* ログアウト処理
*/
function logout()
{
// セッションを破棄してログイン画面へ
$this->Session->delete('auth');
$this->redirect('/users/login');
exit;
}
}
Usersビューを作成
/app/views/users/login.thtml
<div id="login_body">
<h1>ログイン画面</h1>
<?php
// ログインできなかった場合はエラーメッセージ表示
if (!empty($login_error)) {
echo '<font color="red"><b>' . $login_error . '</b></font>';
}
?>
<form method="post" action="<?php echo $html->url('/users/login/'); ?>">
<table>
<tr>
<th><label for="id">メールアドレス:</label></th>
<td><?php echo $html->input('User/email', array('size' => 30)); ?></td>
</tr>
<tr>
<th><label for="pwd">パスワード:</label></th>
<td><?php echo $html->password('User/pwd', array('size' => 30, 'value' => '')); ?></td>
</tr>
<td></td>
<td><?php echo $html->submit(' ログイン '); ?></td>
</tr>
</table>
</form>
</div>
▼若干デザインを入れ、とりあえずこんな感じ。

次は、ホーム画面を作ります。
▼次の記事
[CakePHP]ホーム画面を作る(#002)
▼前回の記事
[CakePHP]テーブルを作成する(#000)
この投稿への コメント/トラックバック はまだありません...
この投稿にはモデレーション待ちのフィードバックが 2 件あります....