- 在织梦CMS(DedeCMS)系统中,如何实现“手机号”作为登录凭证?
- 如何找回或重置织梦后台管理员的登录密码?
我会分别对这两个方面进行详细说明。

在织梦CMS中实现手机号登录
标准的织梦CMS(DedeCMS)默认的登录方式是 用户名/管理员账号 + 密码,它本身不直接支持使用“手机号”登录后台。
你可以通过二次开发(修改代码或使用插件)来实现这个功能,这通常需要以下几个步骤:
核心思路:
修改后台登录验证的代码,在用户输入用户名/密码后,先判断输入的是否是手机号,如果是手机号,则去数据库中查找该手机号对应的用户名,然后再用这个用户名去进行标准的密码验证。
具体实现步骤(代码修改示例):
修改后台登录处理文件

织梦后台的登录验证逻辑主要在 /dede/login.php 文件中,你需要修改其中的验证部分。
找到类似这样的代码段(通常在文件末尾):
// ... 其他代码 ...
$gourl = empty($gourl) ? 'index.php' : $gourl;
if($userid=='' || $pwd=='')
{
ShowMsg('请输入用户名或密码!', '-1');
exit();
}
// 会员登录
$uid = $cfg_ml->getMemberID($userid, $pwd);
if($uid > 0)
{
// ... 登录成功后的处理 ...
}
else
{
// ... 登录失败的处理 ...
}
你需要修改 getMemberID 之前的逻辑,增加一个判断:$userid 是一个手机号(用 preg_match('/^1[3-9]\d{9}$/', $userid) 来验证),就去数据库里查询对应的用户名。
示例修改代码:
// 在 $userid 和 $pwd 获取之后,加入以下逻辑
// 定义一个变量来存储最终用于验证的用户名
$final_username = $userid;
// 检查输入的userid是否是手机号格式
if (preg_match('/^1[3-9]\d{9}$/', $userid)) {
// 是手机号,查询数据库获取对应的用户名
$row = $dsql->GetOne("SELECT userid FROM `dede_admin` WHERE mobile = '{$userid}'");
if (is_array($row)) {
// 找到对应的用户名,使用这个用户名进行后续验证
$final_username = $row['userid'];
} else {
// 手机号不存在,直接提示错误
ShowMsg('该手机号未注册或不是管理员账号!', '-1');
exit();
}
}
// 使用最终的用户名 $final_username 进行登录验证
$uid = $cfg_ml->getMemberID($final_username, $pwd);
if($uid > 0)
{
// ... 登录成功后的处理(这部分代码无需修改) ...
$cfg_ml->PutLogin($uid, $pwd);
ShowMsg('成功登录,正在进入管理主页...', $gourl, 0, 2000);
exit();
}
else
{
// ... 登录失败的处理(这部分代码无需修改) ...
ShowMsg('用户名或密码错误!', '-1');
exit();
}
数据库准备
为了让上述代码工作,你的 dede_admin 表(管理员表)里必须有一个 mobile 字段来存储管理员的手机号。
-
如果你是新系统:在添加管理员的时候,确保在数据库里为该管理员记录填写了
mobile字段。 -
如果你是旧系统:需要先为
dede_admin表添加mobile字段,可以通过phpMyAdmin等工具执行SQL语句:ALTER TABLE `dede_admin` ADD `mobile` VARCHAR(20) NOT NULL DEFAULT '';
注意事项
- 安全性:直接修改核心文件在织梦升级时可能会被覆盖,建议做好备份或使用更健壮的二次开发方案(如开发一个插件)。
- 用户体验:除了手机号,最好仍然保留用户名登录的选项,以兼容所有管理员。
- 前台会员:以上修改是针对后台管理员的,如果想让前台会员也能用手机号登录,则需要修改
/member/login.php等文件,逻辑类似,但查询的表是dede_member。
找回或重置织梦后台登录密码
如果你忘记了织梦后台的登录密码,可以通过以下几种方式来重置。
通过数据库直接重置(最常用、最直接)
这是最可靠的方法,不依赖于任何文件。
- 登录你的数据库管理工具(如 phpMyAdmin)。
- 选择你的织梦数据库。
- 找到
dede_admin表(如果修改过前缀,请使用你自己的表名)。 - 找到你想要重置密码的管理员记录。
- 修改
pwd字段。
织梦的密码是经过 md5 加密的,你需要生成一个新的 md5 密码值。
- 你可以使用在线 MD5 加密工具,将你的新密码(
123456)加密成e10adc3949ba59abbe56e057f20f883e。 - 或者,你也可以直接使用一个已知的 MD5 值,
123456的 MD5 值就是e10adc3949ba59abbe56e057f20f883e。
将 pwd 字段的值更新为这个新的 MD5 值。
- 保存修改,现在你就可以用新密码登录了。
通过修改PHP文件生成新密码
如果你无法直接操作数据库,可以临时修改一个文件来生成新密码。
-
在你的电脑上创建一个新文件,命名为
reset_pwd.php。 -
将以下代码复制进去:
<?php // 请将 'your_new_password' 替换成你想要设置的新密码 $new_password = 'your_new_password'; // 计算新密码的 MD5 值 $md5_password = md5($new_password); echo "你的新密码是: " . $new_password . "<br>"; echo "MD5加密后的值是: " . $md5_password . "<br>"; echo "请复制这个MD5值,然后去数据库的 dede_admin 表中替换 pwd 字段的值。"; ?>
-
将这个文件
reset_pwd.php上传到你网站的任意目录下(例如根目录)。 -
在浏览器中访问
http://你的网站/reset_pwd.php。 -
页面会显示你的新密码和它对应的 MD5 值,记下这个 MD5 值。
-
删除你上传的
reset_pwd.php文件(非常重要!)。 -
按照 方法一 的步骤,登录数据库,用这个新的 MD5 值去更新
dede_admin表的pwd字段。
使用织梦的“安全问题”找回功能(如果已设置)
织梦登录页面通常有一个“忘记密码?”的链接,点击后,如果管理员在个人资料中设置了安全问题和答案,可以通过回答问题来重置密码。
- 优点:无需操作数据库或代码。
- 缺点:很多管理员在安装时并不会设置或忘记了自己设置的安全问题和答案,所以此方法不一定可行。
| 问题 | 解决方案 | 核心操作 |
|---|---|---|
| 我想用手机号登录后台 | 二次开发 | 修改 /dede/login.php,增加手机号查询逻辑,并在数据库 dede_admin 表中添加 mobile 字段。 |
| 我忘记了后台密码 | 重置密码 | 方法一(推荐):登录数据库,找到 dede_admin 表,将 pwd 字段的值更新为你的新密码的 md5 值。 |
| 方法二:通过一个临时PHP文件生成新密码的MD5值,再更新到数据库。 | ||
| 方法三:使用登录页面的“忘记密码”功能,通过回答安全问题重置。 |
希望这个详细的解释能帮助你解决问题!
