您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程

ThinkPHP和Discuz怎么整合

妙菡2025-07-20Discuz教程已有人查阅

导读以下是Discuz6的整合方法,在模板中新增登陆模板,路径为Tpl/default/Public/Login.html这里把官方教程中的模板贴出来,省的再去找了:

以下是Discuz6的整合方法,discuz5请按照里面的说明进行相应的修改,也可以使用了。
1.在项目的action目录下信件PublicAction.class.php。这样写:
class PublicAction extends Action
{
function login()
{
$this->display();
if(!isset($_SESSIONC('USER_AUTH_KEY'))||$_SESSIONC('USER_AUTH_KEY')==0) {
$this->display();
return ;
}else {
redirect(__APP__);
}
}
function index()
{
//如果通过认证跳转到首页
redirect(__APP__);
}
function checkLogin()
{
// 这里使用用户名、密码和状态的方式进行认证。这里是discuz6.1,discuz5的加密方式不一样。用discuz5的话你需要修改下面这一句。
//注意!!!这里直接把$_POST['name']和$_POST['password']放到查询语句中是不安全的。请先进行处理!我是自己处理的,这里没有贴。我在找ThinkPHP中的处理函数,还没有找到。
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
if(false === $authInfo) {
echo '登录失败,请检查用户名和密码是否有误!';
}else {
// 设置认证识别号
session_register(C('USER_AUTH_KEY'));
session_register('loginid');
$_SESSION[C('USER_AUTH_KEY')] = $authInfo["uid"]; // 这里用户表的id字段
$_SESSION["loginid"] = $authInfo["username"];// 这里用户表的用户名字段
//获取并保存用户访问权限列表
RBAC::saveAccessList();
dump($_SESSION);
echo strtoupper(APP_NAME)." ".strtoupper(MODULE_NAME)." ".strtoupper(ACTION_NAME);
}
}
}
2.然后在模板中新增登陆模板,路径为Tpl/default/Public/Login.html这里把官方教程中的模板贴出来,省的再去找了:
<body>
<form method=post name="login" id="form1" action="__URL__/checkLogin">
<div class="tcenter hmargin">
<table id="checklist" class="login shadow" cellpadding=0 cellspacing=0 >
<tr><td height="5" class="toptd" ></td></tr>
<tr class="row" ><th colspan="2" class="tcenter space">系统管理登录</th></tr>
<tr><td height="5" colspan="2" class="toptd" ></td></tr>
<tr class="row" ><td colspan="2" class="tcenter"><div id="result" class="result none"></div></td></tr>
<tr class="row" ><td class="tright" width="25%">帐 号:</td><td><input type="text" class="medium bleftrequire" check="require" warning="请输入帐号" name="name"></td></tr>
<tr class="row" ><td class="tright">密 码:</td><td><input type="password" class="medium bleftrequire" check="require" warning="请输入密码" name="password"></td></tr>
<tr class="row" ><td class="tcenter" align="justify" colspan="2">
<input type="button" value="刷 新" onclick="fleshverify()" class="submit small"><input type="submit" value="登 录" class="submit small hmargin">
<input type="reset" value="重 置" class="submit small">
</td></tr>
<tr><td height="5" colspan="2" class="bottomtd" ></td></tr>
</table>
</div>
</form>
</body>
3.在Model目录中新增一个UserModel.class.php
代码如下:
class UserModel extends Model
{
protected $trueTableName = 'uc_members';//这里是ucenter的用户表的表名。如果你在uc中修改了前缀,就把表名的uc部分修改成自己的。
}
4.可以了进行登录了。就这些。昨天看ThinkPHP的文档看了一整天。TP不是一般的强大啊。个人感觉比FLEAPHP强很多。
如果你使用的是discuz5版本,由于没有ucenter,需要修改两个部分。
一是 PublicAction.class.php中的
$authInfo = RBAC::authenticate("`username`='".$_POST['name']."' AND `password` = md5(concat(md5('".$_POST['password']."'),`salt`))");
二是 UserModel.class.php 中的'uc_members'改成相应数据表。
5. 下载RBAC。
在使用中除了上面的还不够。还要进行RBAC赋权的操作。这里你需要下载一个官方的RBAC示例,推荐放在和你的程序平级的目录。
6.修改RBAC
Model下的UserModel.class.php内容是下面的代码。这个和前面的UserModel.class.php一致。可以直接复制过来
class UserModel extends Model
{
var $trueTableName='uc_members';
}
还要修改GroupAction.class.php中的function user()
代码如下:
function user()
{
//读取系统的用户列表
//以下三句请根据实际情况进行修改
$userDao= D("User");
$list= $userDao->findAll('','uid,username');//我们修改了这里
$userList = $userDao->getCols($list,'uid,username');//还有这里,其他的不要动了。
$groupDao= D("Group");
$list =$groupDao->findAll('','id,name');
$groupList = $groupDao->getCols($list,'id,name');
$this->assign("groupList",$groupList);
//获取当前用户组信息
$groupId =isset($_GET['id'])?$_GET['id']:'';
$groupUserList = array();
if(!empty($groupId)) {
$this->assign("selectGroupId",$groupId);
//获取当前组的用户列表
$list = $groupDao->getGroupUserList($groupId);
$groupUserList = $groupDao->getCols($list,'id,id');
}
//$userList = array_diff_key($userList,$groupUserList);
$this->assign('groupUserList',$groupUserList);
$this->assign('userList',$userList);
$this->display();
return;
}
7.现在可以进行分组操作了。
补充:
1.没有实现同步登陆,因为我不知道在discuz本身中密码的加密方式。大家可以另想办法。
2.你需要自己修改RBAC才能用于正式站点:
(1)给RBAC弄一个登陆,现在没有权限设置,这个事关安全,是必须的。
(2)查看用户列表的时候是全部列出来。弄个简单的搜索和分页吧。等我修改完毕我会把我的发上来。
3.在第一段处理登陆的代码中,有个不安全的地方。请按照说明添一段代码
4.没有实现用户组和Discuz的用户组整合。

本文标签:

很赞哦! ()

相关源码

  • (PC+WAP)院校学院职业学校机构协会网站开源源码下载本模板基于PbootCMS系统开发,为高等院校、职业学校等教育机构设计,特别适合展示学校概况、院系设置、招生信息等内容。采用双端适配技术,确保在PC和移动设备上都能获得良好的浏览体验。查看源码
  • pbootcms模板PC+WAP娱乐新闻资讯类博客网站源码该模板基于PbootCMS内核开发,专为娱乐新闻、健康生活类资讯网站设计,同时支持快速适配其他行业(如企业官网、博客门户等),仅需替换图文内容即可完成转型。查看源码
  • (自适应)酒店民宿客房旅馆pbootcms模板下载基于PbootCMS内核开发的酒店民宿行业专用网站模板,专注于为住宿服务企业提供专业高效的在线展示平台。该模板采用响应式设计结构,确保在不同终端设备上均能呈现优质浏览体验。查看源码
  • (自适应)绿色LED灯具照明灯饰灯光灯泡pbootcms网站源码下载本模板基于PbootCMS内核开发,为LED照明、灯具制造及相关光电技术企业量身打造。设计充分考虑了照明行业的展示需求,从产品陈列到技术说明,从光源展示到工程案例,每一个细节都体现出专业照明行业的特点。查看源码
  • (自适应)蓝色自动溶剂萃取仪器设备类网站pbootcms模板下载本模板为溶剂萃取设备、实验室仪器等精密仪器行业设计,采用PbootCMS内核开发,具有高度专业性和行业适配性。模板设计充分考虑了仪器设备行业展示需求,能够呈现各类精密仪器的技术参数、应用场景和解决方案。查看源码
  • (自适应响应式)黑色LED显示屏户外广告屏网站源码下载这是一款基于PbootCMS内核开发的响应式网站模板,专门为LED显示屏及户外广告行业打造。模板适配各类显示设备,帮助企业快速搭建专业官网,展示产品与服务优势,有效提升品牌形象。查看源码
分享笔记 (共有 篇笔记)
验证码:

本栏推荐