首页 > php框架 > ThinkPHP + Discuz 整合方法

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

转载随意~请带上教程地址吧^^

标签:none

发表留言