Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

X1中新增的登录自动选择帐号功能For Discuz! 7.2

[复制链接]
kentcn 发表于 2010-7-18 23:39:46 | 显示全部楼层 |阅读模式
插件发布
插件名称: 登录自动选择帐号功能 For Discuz! 7.2
插件来源:
适用版本: Discuz! 7.2
语言编码: GBK简体 UTF8简体 BIG5繁体 
最后更新时间:
插件作者: KenT王健中文网
插件简介: 为Discuz! 7.2 增加X1中的登录自动选择帐号功能,站点登录时的将自动按用户名、UID、E-mail逐一去匹配.
本帖最后由 kentcn 于 2010-7-19 00:10 编辑

在X1中,新增了不少非常人性化的功能。登录自动选择帐号功能就是其中之一。

这个功能让登录变得更加简单,不用再去手动切换三种方式(UID,用户名,E-MAIL)。

直接输入即可使用自己喜欢的登录方式,实现登录。



下面是修改方法:

1.进入管理中心,在工具-数据库-优化里面执行这条SQL语句。
  1. INSERT INTO `cdb_settings` VALUES ('autoidselect','1');
复制代码
2.在discuz根目录下,进入admin文件夹找到settings.inc.php并打开。
搜索
  1. showsetting('settings_functions_other_pwdsafety', 'settingsnew[pwdsafety]', $settings['pwdsafety'], 'radio');
复制代码
在下面插入
  1. showsetting('settings_functions_other_autoidselect', 'settingsnew[autoidselect]', $settings['autoidselect'], 'radio');
复制代码
3.进入include文件夹,找到login.func.php并打开。
搜索
  1. function userlogin() {
  2.         global $db, $tablepre, $_DCACHE, $ucresult, $username, $password, $questionid, $answer, $loginfield;
  3.         require_once DISCUZ_ROOT.'./uc_client/client.php';

  4.         if($loginfield == 'uid') {
  5.                 $isuid = 1;
  6.         } elseif($loginfield == 'email') {
  7.                 $isuid = 2;
  8.         } else {
  9.                 $isuid = 0;
  10.         }

  11.         $ucresult = uc_user_login($username, $password, $isuid, 1, $questionid, $answer);
  12.         list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email'], $duplicate) = daddslashes($ucresult, 1);
  13.         $ucresult = $tmp;

  14.         if($duplicate && $ucresult['uid'] > 0) {
  15.                 if($olduid = $db->result_first("SELECT uid FROM {$tablepre}members WHERE username='".addslashes($ucresult['username'])."'")) {
  16.                         require_once DISCUZ_ROOT.'./include/membermerge.func.php';
  17.                         membermerge($olduid, $ucresult['uid']);
  18.                         uc_user_merge_remove($ucresult['username']);
  19.                 } else {
  20.                         return 0;
  21.                 }
  22.         }

  23.         if($ucresult['uid'] <= 0) {
  24.                 return 0;
  25.         }

  26.         $member = $db->fetch_first("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
  27.                 m.email, m.adminid, m.groupid, m.styleid, m.lastvisit, m.lastpost, u.allowinvisible
  28.                 FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
  29.                 WHERE m.uid='$ucresult[uid]'");

  30.         if(!$member) {
  31.                 return -1;
  32.         }

  33.         $member['discuz_userss'] = $member['discuz_user'];
  34.         $member['discuz_user'] = addslashes($member['discuz_user']);
  35.         foreach($member as $var => $value) {
  36.                 $GLOBALS[$var] = $value;
  37.         }

  38.         if(addslashes($member['email']) != $ucresult['email']) {
  39.                 $db->query("UPDATE {$tablepre}members SET email='$ucresult[email]' WHERE uid='$ucresult[uid]'");
  40.         }

  41.         if($questionid > 0 && empty($member['discuz_secques'])) {
  42.                 $GLOBALS['discuz_secques'] = random(8);
  43.                 $db->query("UPDATE {$tablepre}members SET secques='$GLOBALS[discuz_secques]' WHERE uid='$ucresult[uid]'");
  44.         }

  45.         $GLOBALS['styleid'] = $member['styleid'] ? $member['styleid'] : $_DCACHE['settings']['styleid'];

  46.         $cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime'] : 0);

  47.         dsetcookie('cookietime', $cookietime, 31536000);
  48.         dsetcookie('auth', authcode("$member[discuz_pw]\t$member[discuz_secques]\t$member[discuz_uid]", 'ENCODE'), $cookietime, 1, true);
  49.         dsetcookie('loginuser');
  50.         dsetcookie('activationauth');
  51.         dsetcookie('pmnum');

  52.         $GLOBALS['sessionexists'] = 0;

  53.         if($_DCACHE['settings']['frameon'] && $_DCOOKIE['frameon'] == 'yes') {
  54.                 $GLOBALS['extrahead'] .= '<script>if(top != self) {parent.leftmenu.location.reload();}</script>';
  55.         }

  56.         return 1;
  57. }
复制代码
替换
  1. function userlogin($username, $password, $questionid, $answer, $loginfield = 'username') {
  2.         global $db, $tablepre, $_DCACHE, $ucresult;
  3.         require_once DISCUZ_ROOT.'./uc_client/client.php';

  4.         if($loginfield == 'uid') {
  5.                 $isuid = 1;
  6.         } elseif($loginfield == 'email') {
  7.                 $isuid = 2;
  8.         } elseif($loginfield == 'auto') {
  9.                 $isuid = 3;
  10.         } else {
  11.                 $isuid = 0;
  12.         }

  13.         if($isuid == 3) {
  14.                 if(preg_match('/^[1-9]\d*$/', $username)) {
  15.                         $ucresult = uc_user_login($username, $password, 1, 1, $questionid, $answer);
  16.                 } elseif(isemail($username)) {
  17.                         $ucresult = uc_user_login($username, $password, 2, 1, $questionid, $answer);
  18.                 }
  19.                 if($ucresult[0] <= 0) {
  20.                         $ucresult = uc_user_login($username, $password, 0, 1, $questionid, $answer);
  21.                 }
  22.         } else {
  23.                 $ucresult = uc_user_login($username, $password, $isuid, 1, $questionid, $answer);
  24.         }
  25.         
  26.         list($tmp['uid'], $tmp['username'], $tmp['password'], $tmp['email'], $duplicate) = daddslashes($ucresult, 1);
  27.         $ucresult = $tmp;

  28.         if($duplicate && $ucresult['uid'] > 0) {
  29.                 if($olduid = $db->result_first("SELECT uid FROM {$tablepre}members WHERE username='".addslashes($ucresult['username'])."'")) {
  30.                         require_once DISCUZ_ROOT.'./include/membermerge.func.php';
  31.                         membermerge($olduid, $ucresult['uid']);
  32.                         if($olduid != $ucresult['uid']) {
  33.                                 membermerge($olduid, $ucresult['uid']);
  34.                         }
  35.                         uc_user_merge_remove($ucresult['username']);
  36.                 } else {
  37.                         return 0;
  38.                 }
  39.         }

  40.         if($ucresult['uid'] <= 0) {
  41.                 return 0;
  42.         }

  43.         $member = $db->fetch_first("SELECT m.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,
  44.                 m.email, m.adminid, m.groupid, m.styleid, m.lastvisit, m.lastpost, u.allowinvisible
  45.                 FROM {$tablepre}members m LEFT JOIN {$tablepre}usergroups u USING (groupid)
  46.                 WHERE m.uid='$ucresult[uid]'");

  47.         if(!$member) {
  48.                 return -1;
  49.         }

  50.         $member['discuz_userss'] = $member['discuz_user'];
  51.         $member['discuz_user'] = addslashes($member['discuz_user']);
  52.         foreach($member as $var => $value) {
  53.                 $GLOBALS[$var] = $value;
  54.         }

  55.         if(addslashes($member['email']) != $ucresult['email']) {
  56.                 $db->query("UPDATE {$tablepre}members SET email='$ucresult[email]' WHERE uid='$ucresult[uid]'");
  57.         }

  58.         if($questionid > 0 && empty($member['discuz_secques'])) {
  59.                 $GLOBALS['discuz_secques'] = random(8);
  60.                 $db->query("UPDATE {$tablepre}members SET secques='$GLOBALS[discuz_secques]' WHERE uid='$ucresult[uid]'");
  61.         }

  62.         $GLOBALS['styleid'] = $member['styleid'] ? $member['styleid'] : $_DCACHE['settings']['styleid'];

  63.         $cookietime = intval(isset($_POST['cookietime']) ? $_POST['cookietime'] : 0);

  64.         dsetcookie('cookietime', $cookietime, 31536000);
  65.         dsetcookie('auth', authcode("$member[discuz_pw]\t$member[discuz_secques]\t$member[discuz_uid]", 'ENCODE'), $cookietime, 1, true);
  66.         dsetcookie('loginuser');
  67.         dsetcookie('activationauth');
  68.         dsetcookie('pmnum');

  69.         $GLOBALS['sessionexists'] = 0;

  70.         if($_DCACHE['settings']['frameon'] && $_DCOOKIE['frameon'] == 'yes') {
  71.                 $GLOBALS['extrahead'] .= '<script>if(top != self) {parent.leftmenu.location.reload();}</script>';
  72.         }

  73.         return 1;
  74. }
复制代码
4.进入templates\default 文件夹中,找到 admincp.lang.php并打开

搜索
  1. 'settings_functions_other_pwdsafety_comment' => '选择“是”,论坛登录时的密码将进行加密后再传输',
复制代码
在下面增加
  1.         'settings_functions_other_autoidselect' => '启用登录自动选择帐号',
  2.         'settings_functions_other_autoidselect_comment' => '选择“是”,站点登录时的将自动按用户名、UID、E-mail逐一去匹配',
复制代码
5.在templates\default 文件夹中,找到 templates.lang.php 并打开
搜索
  1. 'message_ishidden_hiddenreplies' => '此帖仅作者可见',
复制代码
在下面增加
  1. 'login_id' => '帐 号 :',
复制代码
6.在templates\default 文件夹中,找到login.htm并打开
搜索
  1. <div class="float_typeid selectinput" id="account">
  2.                                                 <select name="loginfield" style="float:left;width:50px;" id="loginfield">
  3.                                                         <option value="username">{lang username}</option>
  4.                                                         <option value="uid">{lang uid}</option>
  5.                                                         <option value="email">{lang email}</option>
  6.                                                 </select>
  7.                                                 <input type="text" name="username" autocomplete="off" size="36" class="txt" tabindex="1" value="$username" />
  8.                                         </div>
复制代码
替换
  1. <!--{if $autoidselect}-->
  2.               <div class="float_typeid selectinput loginpsw" id="account">
  3.                 <label for="username">{lang login_id}</label>
  4.                 <input type="text" name="username" id="username" autocomplete="off" size="36" class="txt" tabindex="1" value="$username" />
  5.               </div>
  6.               <!--{else}-->
  7.                                         <div class="float_typeid selectinput" id="account">
  8.                                                 <select name="loginfield" style="float:left;width:50px;" id="loginfield">
  9.                                                         <option value="username">{lang username}</option>
  10.                                                         <option value="uid">{lang uid}</option>
  11.                                                         <option value="email">{lang email}</option>
  12.                                                 </select>
  13.                                                 <input type="text" name="username" autocomplete="off" size="36" class="txt" tabindex="1" value="$username" />
  14.                                         </div>
  15.               <!--{/if}-->
复制代码
继续搜索
  1. simulateSelect('loginfield');
复制代码
替换
  1.         {if $autoidselect}
  2.                 showPrompt('username', 'focus', '{lang uid}/{lang username}/{lang email}', 0);
  3.         {else}
  4.                 simulateSelect('loginfield');
  5.         {/if}
复制代码
至此代码修改完毕。

7.进入后台,更新缓存后,进入全局-论坛功能-其它选项中可以看到新增加的启用登录自动选择帐号选项的开关。

默认已经开启了。如果想关闭这个功能,选择否,然后提交就可以了。



好了,全部修改完毕。现在Discuz!  X1中全新的自动选择帐号功能已经被成功移植到Discuz!  7.2中了。

退出论坛,去登录下试试吧。

如果你没有修改过论坛的文件。可以使用下面的压缩包直接上传到论坛的根目录替换即可。


评分

2

查看全部评分

回复

使用道具 举报

jncn47 发表于 2010-7-19 02:24:15 | 显示全部楼层
7.1能用吗?

7.1本身没有email登陸的...不知道能用不...
回复

使用道具 举报

 楼主| kentcn 发表于 2010-7-19 11:06:13 | 显示全部楼层
回头研究一下7.1
回复

使用道具 举报

jncn47 发表于 2010-7-19 12:54:16 | 显示全部楼层
7.1下测试失败
回复

使用道具 举报

 楼主| kentcn 发表于 2010-7-19 18:40:40 | 显示全部楼层
回复 jncn47 的帖子


    这个插件是针对7.2的,7.1测试失败也很正常。


回复

使用道具 举报

zxm360 发表于 2010-7-19 22:27:44 | 显示全部楼层
很多人都需要~~感谢楼主啊~~~
回复

使用道具 举报

 楼主| kentcn 发表于 2010-7-20 12:46:53 | 显示全部楼层
回复 zxm360 的帖子


    人人为我,我为人人。哈哈
回复

使用道具 举报

我行我速 发表于 2010-7-20 15:16:16 | 显示全部楼层
有的话下一个
回复

使用道具 举报

ξ寳唄丨吥哭 发表于 2010-7-20 16:27:31 | 显示全部楼层
顶一个,当初我在找来,没人分享。。。现在我把论坛都升级到x1了。。。可惜了。。


http://www.bzysq.com
回复

使用道具 举报

 楼主| kentcn 发表于 2010-7-21 18:43:08 | 显示全部楼层
回复 ξ寳唄丨吥哭 的帖子


    X1也不错,马上出经典版了,我也准备升级呢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-11-2 04:58 , Processed in 0.125934 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表