====== 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に切り替えると、ユーザーが空になるので、登録し直す。