Loading

ブログ - XCL ログインのなぞ (その1

XCL ログインのなぞ (その1

カテゴリ : 
気になったこと
執筆 : 
masa 2008/9/10
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') ハンドラでログインチェックをすれば良いのでは?

事実このように修正しても、一見動いているように見える...
$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) が必要なことを考えると、そのまま使っても良いような気がするのだが....

続く...
(追記)
上記のコードには問題があるので続きを必ず読みましょう...
  • トラックバック (0)
  • 閲覧 (8606)