您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
MoinMoin Wiki与Discuz论坛的单点登陆整合方法
冰露2025-07-08Discuz教程已有人查阅
导读MoinMoin Wiki是Python开发的, Discuz论坛由PHP开发带有Passport整合接口, 综合考虑将Wiki做为主登陆界面, 采用Url传递认证方式同步论坛用户是最简单的方案
MoinMoin Wiki是Python开发的, Discuz论坛由PHP开发带有Passport整合接口, 综合考虑将Wiki做为主登陆界面, 采用Url传递认证方式同步论坛用户是最简单的方案。由于在使用论坛Passport登陆过程中客户端无法创建cookie的问题始终没有解决, 因此只同步2个系统中的账户, 登陆仍然需要分别在2个系统中登陆, 虽然不完美, 但不影响实际使用, 2个系统都有cookie, 只需分别一次登陆即可.
实现:
关闭论坛注册, 所有用户只能从Wiki注册.
刚注册的用户首先需要在Wiki登陆, 通过Wiki认证后调用Url至论坛Passport同步建立论坛账户。
用户修改密码时需要在Wiki修改, 然后重复第二项.
代码修改:
修改MoinMoin Wiki中\Lib\site-packages\MoinMoin\action\login.py, Wiki账户密码采用了不可逆加密方式, 因此只有在这里才能获取到用户原始密码. 通过Wiki认证后, 将账户参数组成为论坛Passport格式Url再传递给论坛. 以下代码对称加密过程请自己完成.
实现:
关闭论坛注册, 所有用户只能从Wiki注册.
刚注册的用户首先需要在Wiki登陆, 通过Wiki认证后调用Url至论坛Passport同步建立论坛账户。
用户修改密码时需要在Wiki修改, 然后重复第二项.
代码修改:
修改MoinMoin Wiki中\Lib\site-packages\MoinMoin\action\login.py, Wiki账户密码采用了不可逆加密方式, 因此只有在这里才能获取到用户原始密码. 通过Wiki认证后, 将账户参数组成为论坛Passport格式Url再传递给论坛. 以下代码对称加密过程请自己完成.
1 if request.user.valid:
2 account = user.User(request, user.getUserId(request, name))
3 import urllib, time, base64, md5
4 #认证key, 自定义
5 mykey = '1111111'
6 #选择md5加密方式和论坛加密方式统一
7 password = md5.new(password).hexdigest()
8 email = account.email
9 #系统时间戳, 防止过期url伪装
10 mytime = time.time()
11
12 auth = {'time':mytime, 'username':name, 'password':password, 'email':email}
13 #为了处理中文用户名需要加入utf8编码, 安全起见这里需要使用自己的对称加密方式加密此字符串
14 auth = ('&'.join(["%s=%s" % (k, v) for k, v in auth.items()])).encode('utf8')
15 #url的验证字符串
16 verify = md5.new(auth+mykey).hexdigest()
17 args = urllib.urlencode({'auth':auth, 'verify':verify})
18 #生成论坛passport url
19 myurl = 'http://bbs.cwowaddon.com/api/passport.php?action=login&' + args
20
21 request.http_redirect(myurl)
22 return request.finish()
在论坛方面因登陆无法创建cookie的问题, 既需要使用passport功能又不希望它完全开启, 因为完全开启会改变论坛的注册, 登陆, 注销的Url. 因此需要动些手脚, 打开数据库xxx_settings表, 找到passport_xxx这样的字段并修改:
passport_expire 3600
passport_extcredits 0
passport_key 1111111
passport_login_url
passport_logout_url
passport_register_url
passport_status
passport_url http://wiki.cwowaddon.com/
然后需要修改api\passport.php
1 if($_DCACHE['settings']['passport_status'] != 'passport') {
2 exit('Passport disabled');
3 } elseif($_GET['verify'] != md5($_GET['action'].$_GET['auth'].$_GET['forward'].$_DCACHE['settings']['passport_key'])) {
4 exit('Illegal request');
5 }
将上面的代码替换为下面的部分, 以开启passport.
1 if($_GET['verify'] != md5($_GET['auth'].$_GET['forward'].$_DCACHE['settings']['passport_key'])) {
2 exit('Illegal request');
3 }
下面的加密方法需要你自己完成, 保证和wiki中的加密解密方法一样.
1 function passport_encrypt($txt, $key) {
2 //....
3 }
4
5 function passport_decrypt($txt, $key) {
6 //....
7 }
8
9 function passport_key($txt, $encrypt_key) {
10 $encrypt_key = md5($encrypt_key);
11 $ctr = 0;
12 $tmp = '';
13 for($i = 0; $i < strlen($txt); $i++) {
14 $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
15 $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
16 }
17 return $tmp;
18 }
关于Passsport请参见Discuz论坛文档有很详细的说明。
本文标签:
很赞哦! ()
相关教程
图文教程
Discuz源码调试方法
现在在网上用的最多的论坛程序是哪个,很明显:DISCUZ~看起来很像DISNEY吧~呵呵,确实,在论坛这个行业里,它就像DISNEY一样出名,现在它的.NET版本开源了
Discuz模板安装后显示异常的原因和解决方法
在处理Discuz模板显示异常时,最关键的是理解这些问题可能源自哪里。通常,问题可能出现在模板文件的编码、样式表的引用、JavaScript脚本的加载、或者是模板与Discuz版本的不兼容性上。
调用discuz编辑器的步骤方法
前面讲了如何开发一个discuz的特殊主题插件,详情可在此查看discuz特殊主题插件开发步骤和犯的愚蠢错误。上一篇文章讲解的是一些简单的开发步骤,不涉及到具体的编码。
Discuz发起投票、活动等互动功能的方法
谈到在Discuz论坛中发起投票和活动等互动功能,首先需要理解Discuz提供的丰富功能和灵活的插件系统是如何帮助我们实现这些目标的。Discuz作为一个成熟的论坛系统
相关源码
-
(自适应)工业机械设备产品介绍免费pbootcms源码下载本网站模板基于PbootCMS内核精心开发,为机械设备与工业产品制造企业量身打造。设计充分考量行业特性,突出产品展示与技术实力呈现查看源码 -
(自适应)品牌创意设计作品工作室pbootcms模板下载该模板适用于品牌策划、艺术设计、广告创意公司官网,亦可通过替换图文快速适配其他行;高端创意设计公司工作室网站源码极简代码架构、艺术化视觉布局、企业级功能扩展性。查看源码 -
WordPress个人博客主题 - wp-Concise-v1.0免费下载wp-Concise-v1.0是一款专为个人博客设计的简约风格主题,采用全宽排版设计理念,注重内容呈现效果。该模板适用于个人随笔、技术分享、生活记录等博客场景,帮助用户打造专业的内容展示空间。查看源码 -
(自适应)平面设计网络工作室个人作品展示网站模板免费下载基于PbootCMS内核开发的响应式网站模板,为设计工作室、创意机构打造的作品展示解决方案。通过模块化布局与极简交互设计,呈现设计作品的视觉细节,支持作品分类、案例解析等多维度展示方式。查看源码 -
帝国CMS7.5二次元COS漫展网站模板源码免费下载本模板基于帝国CMS 7.5版本深度开发,为二次元文化分享领域设计。采用UTF-8编码,支持中文内容展示,特别适用于COSPLAY作品展示、漫展信息发布等二次元相关内容的网站建设。模板结构清晰,布局合理,充分考虑了二次元用户群体的浏览习惯和审美需求。查看源码 -
(自适应)APP应用软件落地页单页推广页网站模板下载基于PbootCMS内核开发的响应式单页模板,为企业产品展示、服务推广等应用场景设计。通过简洁直观的视觉布局与高效的技术架构,帮助用户快速构建专业级落地页面,实现移动端与PC端数据实时同步展示。查看源码
| 分享笔记 (共有 篇笔记) |
