よくありそうなこんなかんじのログイン画面。
かんたんログインボタンと、ID/PASS入力するフォーム。
かんたんログインはいろいろありますけど、とりあえず今回は触れません。
キャリアのゲートウェイのIP制限はしましょうってかんじ。
標準のAuthコンポーネントと、ktaiライブラリを使ってます。
UIDが設定してあれば「かんたんログイン」できて、してなければID/PASS入力してUID設定することもできるという機能。
今回はトップページで行う設定です。
Cakeのバージョンは1.3
やっていることは以下の3点。
・ID/PASSでログイン成功して、「かんたんログイン設定する」にチェックがされていれば、UIDをとってテーブルに突っ込む。
・かんたんログインの場合はUIDをキーにusersテーブルからデータを取ってきてAuth->loginに突っ込んでログインさせる。
・isAuthorized()でログインが成功したらログイン日時を更新。
あ、クッキーが使えない携帯がまだまだたくさんあるため(主にdocomo)、そのための設定も忘れないようにメモ。
2010/07/14追記
ログインの際にUIDをテーブルに追加した場合、
$this->Auth->user()で取れるユーザデータはセッションなので再度ログインしないといけないみたい。
かんたんログインボタンと、ID/PASS入力するフォーム。
かんたんログインはいろいろありますけど、とりあえず今回は触れません。
キャリアのゲートウェイのIP制限はしましょうってかんじ。
標準のAuthコンポーネントと、ktaiライブラリを使ってます。
UIDが設定してあれば「かんたんログイン」できて、してなければID/PASS入力してUID設定することもできるという機能。
今回はトップページで行う設定です。
Cakeのバージョンは1.3
APP/controllers/top_controller.php
class TopController extends AppController { var $name = 'Top'; var $uses = 'User'; var $helpers = array('Ktai','Session','Form'); var $components = array('Ktai','Session','Auth'); function beforeFilter() { $this->Auth->loginAction = '/'; $this->Auth->autoRedirect = false; $this->Auth->authorize = 'controller'; $this->Auth->allow('index'); parent::beforeFilter(); } function beforeRender() { parent::beforeRender(); } function index () { if ($user = $this->Auth->user()) { if (isset($this->data['add_uid'])) { $user['User']['uid'] = $this->Ktai->get_uid(); $this->User->save($user['User']); /* 7/14追記 */ $user = $this->User->findById($set['id']); $this->Auth->login($user); /* 7/14追記ここまで */ } $this->redirect($this->Auth->redirect()); } else { if (isset($this->data['auto_login'])) { if ($user = $this->User->findByUid($this->Ktai->get_uid())) { if ($this->Auth->login($user['User'])) { $this->redirect($this->Auth->redirect()); } else { $this->Session->setFlash('再度かんたんログイン設定をしてください',null); } } else { $this->Session->setFlash('かんたんログイン設定がされていません',null); } } } } function isAuthorized () { $user = $this->Auth->user(); $user['User']['last_login'] = date('Y-m-d H:i:s'); $this->User->save($user['User']); return true; } }
やっていることは以下の3点。
・ID/PASSでログイン成功して、「かんたんログイン設定する」にチェックがされていれば、UIDをとってテーブルに突っ込む。
・かんたんログインの場合はUIDをキーにusersテーブルからデータを取ってきてAuth->loginに突っ込んでログインさせる。
・isAuthorized()でログインが成功したらログイン日時を更新。
usersテーブル
+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(10) | NO | PRI | NULL | auto_increment | | username | varchar(100) | NO | | NULL | | | password | varchar(100) | NO | | NULL | | | uid | varchar(100) | NO | | NULL | | | flag | int(1) | NO | | NULL | | | last_login | datetime | NO | | NULL | | | created | datetime | NO | | NULL | | | updated | datetime | NO | | NULL | | +-------------+--------------+------+-----+---------+----------------+
あ、クッキーが使えない携帯がまだまだたくさんあるため(主にdocomo)、そのための設定も忘れないようにメモ。
APP/config/bootstrap.php
if (!isset($_SESSION)) { if ($ini_set) { ini_set('session.use_trans_sid', 1); ini_set('session.serialize_handler', 'php'); ini_set('session.use_cookies', 0); } }
2010/07/14追記
ログインの際にUIDをテーブルに追加した場合、
$this->Auth->user()で取れるユーザデータはセッションなので再度ログインしないといけないみたい。