MySQLにユーザー認証をさせる
ファイルの準備
- mysql.conf.php.exampleをmysql.conf.phpにリネーム
- mysql.conf.phpを編集
SQLを実行
CREATE TABLE `users` ( `uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `login` VARCHAR(20) NOT NULL DEFAULT '', `pass` VARCHAR(60) NOT NULL DEFAULT '', `firstname` VARCHAR(255) NOT NULL DEFAULT '', `lastname` VARCHAR(255) NOT NULL DEFAULT '', `email` VARCHAR(255) NOT NULL DEFAULT '', PRIMARY KEY (`uid`), UNIQUE KEY `login` (`login`) ) TYPE = MYISAM; CREATE TABLE `groups` ( `gid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL DEFAULT '', PRIMARY KEY (`gid`), UNIQUE KEY `name` (`name`) ) TYPE = MYISAM; CREATE TABLE `usergroup` ( `uid` INT(10) UNSIGNED NOT NULL DEFAULT '0', `gid` INT(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`uid`,`gid`) ) TYPE = MYISAM;
- local.protected.phpに
<?php require_once('mysql.conf.php'); ?>
パスワードをチェックさせる
ユーザー名が存在すると、パスワードが違っていてもログインができてしまいます。
conf/mysql.conf.php
$conf['auth']['mysql']['checkPass'] = "SELECT pass FROM usergroup AS ug JOIN users AS u ON u.uid=ug.uid JOIN groups AS g ON g.gid=ug.gid WHERE login='%{user}' AND name='%{dgroup}'";
最後の1行をAND pass='%{pass}'“;に置換。
inc/auth/mysql.class.php
FUNCTION checkPass($user,$pass){ $rc = FALSE; IF($this->_openDB()) { $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']); $sql = str_replace('%{pass}',$this->_escape($pass),$sql); $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql); $result = $this->_queryDB($sql);
の後ろに if($result) $rc = true; を挿入。
xreaの文字化け対策
inc/auth/mysql.class.php
$con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
という行の後ろに
mysql_query("SET NAMES utf8", $con);
を挿入
登録する
MySQLに切り替えると、ユーザーが空になるので、登録し直す。