====== 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に ===== パスワードをチェックさせる ===== ユーザー名が存在すると、パスワードが違っていてもログインができてしまいます。 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に切り替えると、ユーザーが空になるので、登録し直す。