使う必要があったから調べた

OpenPNE2系でも、

http://trac.openpne.jp/wiki/pne-book-7

こんな勢いで、認証をやっていたみたいだが
問題はテーブル構造が違う。

2系の場合は、

AuthMySQLEnable on
AuthMySQLUser *****
AuthMySQLPassword **********
AuthMySQLDB #DB_NAME#
AuthMySQLNameField nickname
AuthMySQLPasswordField hashed_password
AuthMySQLUserTable "c_member, c_member_secure"
AuthMySQLUserCondition "c_member.c_member_id=c_member_secure.c_member_id"
AuthMySQLPwEncryption md5
Require valid-user

この場合、ニックネームは英数字の必要があったり
一意にしろー!! みたいな感じで告知する必要があるので若干面倒
でも、こんなにスマートにいける。(設定自体は)

3系はどうだろう。
ニックネームは memberテーブルの name
パスワードは member_configテーブルの value にmd5にハッシュ化された状態いるわけだ。
この状態だと、従来通りのやりかたではうまくいかなかったので発想を変える。

まず、 memberテーブルの name を使うのは止した方がいいだろう。
これは、一意じゃないし英数字じゃない場合があったりするので面倒だ。
重複不可のプロフィール項目をつくるなどすればいいだろう。
分かれているテーブルを使うのは面倒なので、ビュー表を使うことにする。

まず、プロフィール項目つくーる
管理画面→プロフィール項目設定 でサクっと

重複を許可しないようにしたり、正規表現で英数字限定にしたりするのがポイント

作ったらIDを確認する

びゅーひょーつくーる
mysql で OpenPNE用のDBで以下のクエリ発行

CREATE VIEW authuser AS
SELECT mp.member_id as id, mp.value as user, mc.value as password
FROM member_profile mp INNER JOIN member_config mc ON mp.member_id = mc.member_id
WHERE mp.profile_id = 5 AND mc.name = 'password';

mp.profile_id = 5 のところは、上で確認した数字にする。

これで SELECT * FROM authuser;
で プロフィールで設定したID とパスワードの組み合わせが簡単に取得できるようになる。

こうなればもうコッチのモノで

AuthMySQLEnable on
AuthMySQLUser *****
AuthMySQLPassword **********
AuthMySQLDB #DB_NAME#
AuthMySQLNameField user
AuthMySQLPasswordField password
AuthMySQLUserTable authuser
AuthMySQLPwEncryption md5
Require valid-user

とすれば、めでたくOpenPNE3中で設定した値でTracにログインできるようになる。
お試しあれ。

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>