ブログ - XCL ログインのなぞ (その1
XCLのログインコードを見ていてちょっと気になったのは
というくだり。
$userHandler =& xoops_getmodulehandler('users', 'user');
$criteria =& new CriteriaCompo();
$criteria->add(new Criteria('uname', xoops_getrequest('uname')));
$criteria->add(new Criteria('pass', md5(xoops_getrequest('pass'))));
$userArr =& $userHandler->getObjects($criteria);
(...中略...)
$handler =& xoops_gethandler('user');
$user =& $handler->get($userArr[0]->get('uid'));
$xoopsUser = $user;
というくだり。
_
なぜ xoops_getmodulehandler('users', 'user') で取得したハンドラでログインチェックを行い、その後そのuid から xoops_gethandler('user') ハンドラを使って $xoopsUser を取得するのだろう?
互換性の問題から $userArr[0] が使えないのはわかるが、それであれば最初からxoops_gethandler('user') ハンドラでログインチェックをすれば良いのでは?
事実このように修正しても、一見動いているように見える...
違いを探るためにそれぞれのハンドラの実装をチェック
・xoops_gethandler('user')
ファイル=kernel/user.php
クラス=XoopsUserHandler extends XoopsObjectHandler
・xoops_getmodulehandler('users', 'user')
ファイル=modules/user/class/users.php
クラス=UserUsersHandler extends XoolsObjectGenericHandler
確かに基底クラスが異なっていたり、XoopsUserHandler は大きすぎる感じはあるが、互換性のためには XoopsUser (=XoopsUserHandler) が必要なことを考えると、そのまま使っても良いような気がするのだが....
続く...
(追記)
上記のコードには問題があるので続きを必ず読みましょう...
なぜ xoops_getmodulehandler('users', 'user') で取得したハンドラでログインチェックを行い、その後そのuid から xoops_gethandler('user') ハンドラを使って $xoopsUser を取得するのだろう?
互換性の問題から $userArr[0] が使えないのはわかるが、それであれば最初からxoops_gethandler('user') ハンドラでログインチェックをすれば良いのでは?
事実このように修正しても、一見動いているように見える...
$userHandler =& xoops_gethandler('user');
$criteria =& new CriteriaCompo();
$criteria->add(new Criteria('uname', xoops_getrequest('uname')));
$criteria->add(new Criteria('pass', md5(xoops_getrequest('pass'))));
$userArr =& $userHandler->getObjects($criteria);
$user =& $userArr[0];
(...中略...)
$xoopsUser = $user;
違いを探るためにそれぞれのハンドラの実装をチェック
・xoops_gethandler('user')
ファイル=kernel/user.php
クラス=XoopsUserHandler extends XoopsObjectHandler
・xoops_getmodulehandler('users', 'user')
ファイル=modules/user/class/users.php
クラス=UserUsersHandler extends XoolsObjectGenericHandler
確かに基底クラスが異なっていたり、XoopsUserHandler は大きすぎる感じはあるが、互換性のためには XoopsUser (=XoopsUserHandler) が必要なことを考えると、そのまま使っても良いような気がするのだが....
続く...
(追記)
上記のコードには問題があるので続きを必ず読みましょう...