背景介绍
微信和微博等的第三方集成已经成为了一种趋势,笔者刚好有一个需求,需要将moodle平台加入微信登录功能,同时保留原有的moodle登录功能,搜了很久,网上没有找到什么资料,大部分资料也比较老,所以会将关键逻辑实现思路写一下,自己很久没有接触php开发,对此很不熟悉,moodle的模式也不同于以往的MVC模式,这里的包含关系很复杂,有时找函数半天找不到,但是今天通过对login.php文件的仔细研究,终于明白了基本的登录流程与如何接入方案。
移动学习与微信公众号的结合,催生了很多微信第三方登录开发的需要,笔者简单的介绍一种方案,很多moodle开发还是以插件的形式开发的,笔者水平有限,具体插件开发的技巧在参考文献中有一篇文章做了专门的介绍。
Moodle环境如下,可以自己参考:
$version = 2018051704.00;
$release = '3.5.4 (Build: 20190114)';
$branch = '35';
我先在本地部署了一个moodle作为开发测试,官方其实有windows的一键部署环境,参考文章部署。
https://blog.csdn.net/u012019376/article/details/42191329
流程介绍:
1、moodle登录的流程
登录页面为:moodle/login/index.php
较为详细的逻辑与流程实现,实现登录的关键函数为:
//鉴定用户账号密码是否正确
authenticate_user_login( $username, $password );
//完成用户注册,设置用户Cookie等信息
$USER = complete_user_login( $user );
最简单的方案是什么呢,登录时对$user进行了鉴定之后,可以直接调用complete_user_login($user);并设置Cookie等消息,直接跳转到首页即可。
2、微信登录的逻辑
微信的登录逻辑,官方的文档介绍的比较详细,我简单介绍一下。
扫码的话,会获取到code,然后跳转到另一个页面,向服务器请求获取用户的uid,接着进行逻辑操作即可。
微信公众号,则打开页面直接获取用户的uid,到数据库中做逻辑判断,这个在微信的官方文档作介绍即可。
3、Moodle+微信登录逻辑
用户扫码(或者微信打开)--->获取微信用户uid--->判断用户uid是否已经在数据库中,如果在执行登录操作。
如果不在,则用户选择绑定或者新注册。并且将微信的uid记录在PHP全局变量中。
新用户注册将数据写入数据库
绑定则核对老用户的账号密码是否与系统一致,如果一致则更新信息。
authenticate_user_login( $username, $password );
验证用户密码用上面这个函数,这里我有一个问题就是,moodle3.5的密码我不知道怎么生成,找了好久愣是没找到系统密码的生成,如果有找到的欢迎与我探讨啊。
具体实现:
第一步、添加微信扫码入口
第一个功能是要添加微信的二维码登录接口,但其实与普通的MVC模型不同,moodle几乎所有的页面都采取了主题的方式,所以入口会显得比较隐蔽,moodle采取了不同的主题,所以我们首先需要知道当前系统的主题到底是什么。
为了方便调试呢,我新建了一个wx的文件夹在moodle/login/目录。
新建wx.php内容如下:
require_once("../../config.php");
echo "输出当前系统的主题";
echo $CFG->theme;
运行该php文件,会输出当前系统采用的主题,我的主题就是boost,系统的默认主题。这个主题修改比较简单。
在login.php中,有这么一行代码$PAGE->set_pagelayout('login');
他代表了主题与前端模板的位置,我们在moodle\theme\boost\templates\core
中找到loginform.mustache,登录页面的表单内容就在这里设置,搜索button。
因为登录页面的表单其实就是一个button,加入微信扫码的链接即可。
我在176行加入了以下代码:
![](http://img.e-com-net.com/image/info10/f23d90d7c7aa4184bbd7959f6c785ae6.png)
保存刷新,登录页面效果已经出来了。
注意要自己讲微信登录的回调链接设置好即可。
但是有些主题就比较隐蔽了,登陆链接在/moodle/lib/templates中找到loginform.mustache这个文件里。
(哎,我真的是找了2个晚上,熬得眼睛很痛,还好被我找到了)
其实在login.php有一段代码好像与这个相关但是找了好久真是没找到啊,就在倒数第几行,有一个loginform以为是,仔细一看其实并不是。下次遇到问题请先搜索loginform这个文件吧,不然真的好难找啊。
最后修改好了,效果还是很不错的。
添加效果图,加入一个微信扫码的链接
微信扫码页面,同时保留登录注册,扫码后会登录或注册或绑定。
总体感觉还是可以的吧,可以自己美化的更加厉害哦
第二步:微信接口的配置
首先在微信开放平台和微信公众号平台注册好相对应的账号并进行认证,在两个平台都进行认证,在开放平台进行绑定公众号平台之后,通过二者的绑定,对每个微信用户都会有唯一的UnionID,以此实现统一网页登录与公众号入口登录网站功能。
微信登录统一方式
在微信开放平台获取到Appid与AppSecret,并记录复制下来,准备进行下一步的操作。这里参考官方或者其他人的文档吧。
总结
实现微信三方平台在moodle的登录注册应用,我自己走了太多的弯路,网络的资料也比较少,希望大家能多总结多学习,在实现微信、微博、QQ等第三方登录注册的关键功能时,尤其是应用在某些平台时,其实最重要的是弄清平台的登录注册逻辑,才方便将三方登陆加进来,QQ和微博可能普通大众都可以申请,但是微信就需要认证了。
参考
找到解决策略了哦:
http://www.zhixing123.cn/shijian/17310.html
本文介绍到了关键技术,希望大家能看懂哦
我搜集的很多关于moodle二次开发的资料
微信二次开发的资料
https://justcoding.iteye.com/blog/2062376
$PAGE生成页面
https://blog.csdn.net/AGE_03/article/details/47073991
其他:
1、加入QQ登陆,2013年,资料有点老了
https://wenku.baidu.com/view/92a0f383de80d4d8d05a4f74.html
2、微博登陆资料,2017年,资料较新,值得学习与使用
http://www.wanfangdata.com.cn/details/detail.do?_type=perio&id=dnbcjqywh201721015
万方数据的下载又是一个头痛的问题。
3、moodle外观的完善与修改
https://jingyan.baidu.com/article/a17d52851825fb8098c8f2fe.html
4、找到一篇比较新的文档,网友提供
https://www.doc88.com/p-9763519113184.html
5、还有一个微信登陆的插件
https://www.emeneoplugins.chocolatelms.com/course/search.php?search=wechat
后话
笔者对moodle等平台有着不少的折腾经验,如果你需要技术服务,欢迎与我联系。
点击进入我的淘宝店铺,希望本文能对大家有所帮助。
也希望大家关注我的公众号:ok_dev,分享实用的信息技术技巧。