ThinkPHP + Discuz 整合方法
以下是Discuz6的整合方法,discuz5请按照里面的说明进行相应的修改,也可以使用了。
1.在项目的action目录下信件PublicAction.class.php。这样写:
代码如下:
如果你使用的是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一致。可以直接复制过来
代码如下:
补充:
1.没有实现同步登陆,因为我不知道在discuz本身中密码的加密方式。大家可以另想办法。
2.你需要自己修改RBAC才能用于正式站点:(1),给RBAC弄一个登陆,现在没有权限设置,这个事关安全,是必须的。(2)查看用户列表的时候是全部列出来。弄个简单的搜索和分页吧。等我修改完毕我会把我的发上来。
3.在第一段处理登陆的代码中,有个不安全的地方。请按照说明添一段代码
4.没有实现用户组和Discuz的用户组整合。
monkey93sm
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);
- }
- }
- }
- <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>
代码如下:
- class UserModel extends Model
- {
- protected $trueTableName = 'uc_members';//这里是ucenter的用户表的表名。如果你在uc中修改了前缀,就把表名的uc部分修改成自己的。
- }
如果你使用的是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';
- }
代码如下:
- 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;
- }
补充:
1.没有实现同步登陆,因为我不知道在discuz本身中密码的加密方式。大家可以另想办法。
2.你需要自己修改RBAC才能用于正式站点:(1),给RBAC弄一个登陆,现在没有权限设置,这个事关安全,是必须的。(2)查看用户列表的时候是全部列出来。弄个简单的搜索和分页吧。等我修改完毕我会把我的发上来。
3.在第一段处理登陆的代码中,有个不安全的地方。请按照说明添一段代码
4.没有实现用户组和Discuz的用户组整合。
monkey93sm
posted on 2012-05-21 11:02 Roc ps'king 阅读(359) 评论(0) 编辑 收藏 举报