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
转载随意~请带上教程地址吧^^