CakePHPで自動ログインコンポーネント
haseken
haseken
ATOMRSS
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加
  • GoodJob
  • 25

GJGJ

GJGJGJGJGJ

説明

cakePHPで自動ログインをする機能を汎用化出来ないかと思い、
コンポーネントにしてみました。

・動作概要
1.セッションIDだけをcookieに保持し、他の情報は保持させない。
2.他のブラウザ/場所でログインしても、それぞれに有効期限付きのcookieが発行される。
3.どこでログアウトしても全てのセッションをログアウト状態にする。


・使用方法
使用する前に、ユーザのセッションIDとユーザIDを保持するテーブルを追加します。

作成したセッションID保存用テーブル

CREATE TABLE `session_datasets` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `user_id` int(10) unsigned NOT NULL,
  `session_id` char(40) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE (`session_id`),
  INDEX (`user_id`),
  FOREIGN KEY  (`user_id`) REFERENCES user_profile (`id`) ON DELETE CASCADE
ENGINE=InnoDB DEFAULT CHARSET=utf8

ユーザ情報とセッションIDを分けることで、ユーザ情報がどのような形でも同じように処理することが出来ます。
また、DBへのアクセスはcakePHPに任せるので、上記で作ったテーブルのモデルが必要になります。

上記テーブルのモデル

<?php
class SessionDataset extends AppModel {

    var $name 'SessionDataset';
    var $validate array(
        'user_id' => VALID_NOT_EMPTY,
        'session_id' => VALID_NOT_EMPTY,
    );
    var $belongsTo array(
            'UserProfile' =>
                array('className' => 'UserProfile',
                        'foreignKey' => 'user_id',
                        'conditions' => '',
                        'fields' => '',
                        'order' => '',
                        'counterCache' => ''
                ),
        );
}
?>

startup()メソッドの中で使用するモデルの設定をします。
設定するのは6点。
・ユーザ情報を扱うモデル名(ココではUserProfile)
・ユーザ情報の中でユニークな主キーを保存する列名(ココではemail)
・ユーザ情報の中でパスワードの列名(ココではpassword)
・セッション情報を扱うモデル名(上記で作ったモデル名SessionDataset)
・セッション情報の中でユーザIDを保存する列名(ココではuser_id)
・セッション情報の中でセッションIDを保存する列名(ココではsession_id)

これらの設定をしたauth.phpを/app/controllers/compornents以下に配置後、ログイン処理が必要なコントローラに

    var $components array('Auth');

を追加します。
大抵の場合、ログインが必要なサービスは全ての画面でログイン判定を使うことになるので、AppControllerに追加し、beforeFilter()メソッド内に

    function beforeFilter() {
        parent::beforeFilter();
        $this->set('isLogin' $this->Auth->isLogin());
    }

とすると良いかも知れません。

・各メソッド詳細

boolean login($key, $password, $expire null)

$keyはユーザ情報テーブルからユーザIDを取得するためのユニークなキー値です(例えばメールアドレスなど)
$passwordはフォームから入力されたパスワードです。
中でハッシュ化はしていませんので、必要な場合はこのメソッドに渡す前にハッシュ化して下さい。
$expireはcookieの有効期限です。この秒数の間、ブラウザを閉じてもcookieがあればisLogin()はtrueを返します。

boolean logout()

セッションID保存用テーブルからログアウトするユーザIDのレコード全てを消去し、cookieを無効にします。

boolean isLogin()

有効期限内のcookieにsession_idがあり、セッションID保存テーブル内に同じIDが有ればtrueを返します。

ソースコード

コメント

  • ゲスト
  • 1:ゲスト
  • 2007/09/19 08:51

$expireはcookieの有効期限です。この秒数の間、ログアウトしてもcookieがあればisLogin()はtrueを返します。

それ、logoutじゃないから!

login()メソッド
 引数のデフォルト値、$expire null じゃなくて、普通 $expire じゃね?
logout()メソッド
  getUserID()を呼ばずに、コードをコピペしてるのはダサくね?


GJGJGJ

この長い内容詳しく見ていただいた様でありがとうございます^^;

>それ、logoutじゃないから!
×ログアウトしても
○ブラウザを閉じても
ですね^^;

>login()メソッド
> 引数のデフォルト値、$expire null じゃなくて、普通 >$expire じゃね?
>logout()メソッド
getUserID()を呼ばずに、コードをコピペしてるのはダサくね?
確かにその通りですね。
修正しておきます。
指摘ありがとうございました。

GJ

  • ゲスト
  • 3:ゲスト (eee)
  • 2007/12/07 17:54

eee

GJ

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ソースコードのブログパーツ

デフォルトのフォントサイズ
修飾
表示サイズ
px px
プレビュー (表示する)
下のプレビュー領域をクリックすると、ポップアップで全体を見ることができます。
パラメータが不正です

    GoodJobしたユーザ

    • wildwell
    • ryotaro

    ブックマークコメント

    • Icon_bm_hatebu ログイン処理をコンポーネント化とかぬかしてます。 (odoku)

    関連するなにがし

    前へ 1 次へ

    タグ

    raketime machineイベントログfilesystemobjectdeveloperprogrammingprimenumberflexriatagged電卓分数逆ポーランド記法ポーランド記法jaxbdyndnsarraylistdeepcopyディープコピーobjectoutputstreambytearrayoutputstreamobjectinputstreambytearrayinputstreamiterator複数チェックボックスmultibytexencentos文字エンコーディングinit_connectcharacter-set-servercollation-serverdefault-character-setヘルパーメソッド動的メソッド呼び出しf:labelwsse2重登録防止prototype.js位置positionedoffsetscrolltoスクロールpositionlink_tocyclecheck_box_tagチュートリアルactive_formerror_messages_forハイライトバリデーションvalidate便利リストデコレーションメールデコメ非対応機種tilestext_field_tag一括複数情報etherealrtphexテキストデータ抽出validwhenリセット一括更新plop置換replacepcoslogmixisregソケットnet::telnetfopenmutexサンプルcalendar[linux][bash][シェルスクリプト][大容量]mobilerorrails2.1クリップボードclipboard横向きピラミッドs2jdbc-genjsonicお絵かきフルパス名抽出サブドメインサブドメイン名s2jdbc自動生成エンティティxhtml

    前へ 1 2 3 ... 8 次へ