よくありそうなこんなかんじのログイン画面。かんたんログインボタンと、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()で取れるユーザデータはセッションなので再度ログインしないといけないみたい。
