以下、User_EmailLogin.class.php をpreloadフォルダへ入れます。
<?php
if( ! defined( 'XOOPS_ROOT_PATH' ) ) exit ;
class User_EmailLogin extends XCube_ActionFilter
{
function preFilter()
{
$root =& XCube_Root::getSingleton();
$root->mDelegateManager->add("Site.CheckLogin", array( &$this , 'checkLogin') ) ;
}
function checkLogin(&$xoopsUser)
{
if (is_object($xoopsUser)) {
return;
}
$root =& XCube_Root::getSingleton();
$root->mLanguageManager->loadModuleMessageCatalog('user');
$userHandler =& xoops_getmodulehandler('users', 'user');
$criteria =& new CriteriaCompo();
$criteria->add(new Criteria('email', xoops_getrequest('uname')));
$criteria->add(new Criteria('pass', md5(xoops_getrequest('pass'))));
$userArr =& $userHandler->getObjects($criteria);
if (count($userArr) != 1) {
return;
}
if ($userArr[0]->get('level') == 0) {
// TODO We should use message "_MD_USER_LANG_NOACTTPADM"
return;
}
$handler =& xoops_gethandler('user');
$user =& $handler->get($userArr[0]->get('uid'));
$xoopsUser = $user;
//
// Regist to session
//
$root->mSession->regenerate();
$_SESSION = array();
$_SESSION['xoopsUserId'] = $xoopsUser->get('uid');
$_SESSION['xoopsUserGroups'] = $xoopsUser->getGroups();
}
}
?>
落とし穴はここから。
このままだとユーザー名の上限である25文字以上のメールアドレス使っているユーザーはメールアドレスを入力できません。
そこで、userモジュールのブロックテンプレートuser_block_login.htmlのmaxlengthを25文字でなくメールアドレスの最大文字長である255文字に変えます。
<form action="<{$xoops_url}>/user.php" method="post" style="margin-top: 0px;">これで一件落着と思いきやもう一つ見逃してはなりません。WizMobileで携帯対応しているならこれも手を入れる必要があります。
<{$smarty.const._MB_USER_USERNAME}><br />
<{xoops_input type=text name=uname size=12 value=$block.unamevalue maxlength=255 id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_uname"}><br />
<{$smarty.const._MB_USER_PASSWORD}><br />
<{xoops_input type=password name=pass size=12 maxlength=32 id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_pass"}><br />
<!--<label><{xoops_input type=checkbox name=rememberme value=On class=formButton}><{$smarty.const._MB_USER_REMEMBERME}></label><br />-->
<input type="hidden" name="xoops_redirect" value="<{$xoops_requesturi}>" />
<{xoops_input type=hidden name=op value=login id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_op"}>
<{xoops_input type=submit name=submit value=$smarty.const._MB_USER_LOGIN id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`block_submit"}><br />
</form>
<{if $block.use_ssl == '1'}>
<a href="javascript:openWithSelfMain('<{$block.sslloginlink}>', 'ssllogin', 300, 200);"><{$smarty.const._MB_USER_SECURE}></a>
<{/if}>
<a href="<{$xoops_url}>/lostpass.php"><{$smarty.const._MB_USER_LOSTPASS}></a>
<br /><br />
<{if $block.allow_register == '1'}>
<a href="<{$xoops_url}>/register.php"><{$smarty.const._MB_USER_USERREG}></a>
<{/if}>
xoops_trust_pathのmodules/wizmobile/templates/main_login.html
これを開いてこっちも255文字へ上限を変更。これでやっとXOOPS Cube のメールアドレスログインが実現します。おっと、WziMobileのバージョンは最新版をダウンロードするのをお忘れなく。Ver0.51以降は簡単ログインでチケット処理が追加されてます。
<div id="<{$wizmobile_dirname}>Login">
<form action="<{$xoops_url}>/modules/<{$wizmobile_dirname}>/index.php" method="post">
<input type="hidden" name="act" value="Login" />
<{wiz_gticket area=$wizmobile_dirname}>
<input type="submit" value="<{"WIZMOBILE_LANG_SIMPLE_LOGIN"|wiz_constant}>" />
</form>
<span style="margin-top: 1em; color: #ff0000;"><{"WIZMOBILE_MSG_SIMPLE_LOGIN_CAUTION"|wiz_constant}></span>
</div>
<br />
<form action="<{$xoops_url}>/user.php" method="post" style="margin-top: 0px;">
<{$smarty.const._MB_USER_USERNAME}><br />
<input name="uname" id="<{$smarty.const.XOOPS_INPUT_DEFID_PREFIX}>_uname" type="text" size="12" maxlength="255" <{wizin_inputmode mode="alpha"}> /><br />
<{$smarty.const._MB_USER_PASSWORD}><br />
<input name="pass" id="<{$smarty.const.XOOPS_INPUT_DEFID_PREFIX}>_pass" type="password" size="12" maxlength="32" <{wizin_inputmode mode="alpha"}> /><br/>
<{xoops_input type=hidden name=op value=login id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`_op"}>
<{xoops_input type=submit name=submit value=$smarty.const._MB_USER_LOGIN id="`$smarty.const.XOOPS_INPUT_DEFID_PREFIX`_submit"}>
</form>
<a href="<{$xoops_url}>/lostpass.php"><{$smarty.const._MB_USER_LOSTPASS}></a>
<br /><br />
<{if $wizmobile_userModuleConfig.allow_register == '1'}>
<a href="<{$xoops_url}>/register.php"><{$smarty.const._MB_USER_USERREG}></a>
<{/if}>
以上、XOOPS Cube でメールアドレス・ログインを実現する実践編でした。
0 件のコメント:
コメントを投稿