ThinkPHP + Discuz 整合方法
ThinkPHP + Discuz 整合方法
以下是Discuz6的整合方法,discuz5请按照里面的说明进行相应的修改,也可以使用了。
1.在项目的action目录下信件PublicAction.class.php。这样写:
<?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" colspan="2" 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 {
//这里是ucenter的用户表的表名。如果你在uc中修改了前缀,就把表名的uc部分修改成自己的。
protected $trueTableName = 'uc_members';
}
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.修改RBACModel下的UserModel . class . php内容是下面的代码。这个和前面的UserModel . class . php一致。可以直接复制过来class UserModel extends Model {
var $trueTableName = 'uc_members';
}
还要修改GroupAction . class . php中的functionuser() 代码如下:
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.现在可以进行分组操作了。
永久地址:http://www.phprm.com/frame/bda6d2a5cff6b9fc89d61f2d83a06d2d.html
转载随意~请带上教程地址吧^^