第34卷第4期2020年12月
开封大学学报
JOURNAL OF KAIFENG UNIVERSITY
Vol.34No.4
Dec.2020
单服务号完成扫码登录的设计与实现
梁宏匕魏庆2,刘子震",陈凯1b
(1.开封大学a.继续教育学院,b.图书馆,河南开封475004;2.河南财经政法大学计算机与信息工程学院,河南郑州450046)
摘要:传统的OA网站需要凭用户名和密码登录。如果改为扫码登录,就会有效减轻使用人员记忆密码的负担。目前,扫码登录需要通过开放平台来实现,这是主流的技术方案。
开放平台是一个与并行的独立系统平台,需要单独付费注册,这样才可以使用遥现在,
许多单位都拥有自己的(服务号)。研究表明,通过单服务号也可完成扫码登录,无须额外购买注册开放平台账户遥该设计方案对融合传统OA与功能也具有一定的参考价值。
关键词:;服务号;扫码登录;OA;Golang
中图分类号:TP316文献标识码:A文章编号:1008-343X(2020)04-91-03
0引言
传统的OA系统需要凭用户名和密码登录,操作不太方便。改为扫码登录,既可避免每次都要输入用户名和密码的繁琐,又可提高账户的安全性[1]遥因此,改造传统OA的登录机制,增加扫码登录功能,成为升级现有办公系统的重要工作内容之一。
关于实现扫码登录功能,目前的主流方案为:通过注册开放平台账户,获得相应接口的调用权限,调用指定的URL地址后,回调至指定页面,从而完成扫码登录[2]遥
开放平台是一个与(主要分为、服务号、企业号三种类型,除外,其他两种类型都具有二次开发功能)并行的独立系统平台,用户每年都需要额外付费注册或认证,方可使用,即便是拥有自己的机构,也不例外遥那么,能否通过单服务号完成扫码登录,而无须额外购买注册开放平台账户呢?答案是:可以遥通过现有的公众服务号,单独实现扫码登
录功能,可以有效提高传统OA的升级改造效率,提高OA与用户的融合度,并且可以免除额外注册认证的负担。本文拟通过具体案例,探讨这一功能的实现路径。本文提供的设计方案对融合传统OA与功能也具有一定的参考价值。1单公众服务号实现扫码登录的基本原理
实现扫码登录的实质就是对用户身份进行鉴别。系统面对每一位关注该公号的人员,都会生成一个唯一的识别码OpenlD,这就相当于给每位用户分配一个“身份证号”,用户取消关注后再次关注,这个号码也保持不变[3][4]遥
当用户通过电脑浏览器打开OA系统进行登录的时候,系统会产生登录二维码。用户拿手机扫描后,会被导入指定进行身份验证。验明用户身份后,会向OA服务器“打招呼”放行,OA服务器将设置“已验证”标志。用户的浏览器检测到“已验证”后,即转向OA系统的主界面,从而完成扫码登录工作。
2方案设计与技术实现
前面提到,需要给OA服务器“打招呼”。基于此,可以通过RPC或者数据库等方式实现“状态”传递。本案例采用的是MySQL云数据库,以此实现“耦合”,完成数据交换。开发环境为Golang+ beeGo框架。
2.1构建共享表
为便于数据交换,在云数据库中建表OA赃Lo-
收稿日期:2020-12-07
作者简介:梁宏(1973—),男,河南开封人,高级工程师,计算机工程硕士,主要从事区块链技术研究。
91
gin。其结构如图1所示:
栏位I素引I卿t|触发器|选顷|a»|SQL预览|
名小数点允许空值(
Uuid varchar400□
Openld varchar400
ITm datetime00□
►H bigint2000
图1OA_Login表结构
2.2升级OA服务器端
要在所有0A页面的控制器基类中添加权限验证,如无权限,就会被导向扫码登录界面。本案例在BaseController的Prepare方法中检查会话变量ssOPENID是否为空,若为空,则转向扫码登录界面。
2.3设计扫码登录页面
在用户通过浏览器加载时,即与云数据库交互,通过select replace(uuid(),鸳-鸳,")as uuid;语句,产生无“-”符的UUID。UUID是较GUID更利于数据库检索的全局唯一性ID值,此ID值将被作为与用户会话的凭据,在产生二维码图案和进行身份核验时发挥关键作用。之所以不采用数据库自增型ID,是因为想让输出的二维码图案疏密度合适,尽量一致,并且由于位数长达32位,所以增强了安全性。将产生的UUID值插入OA_Login表,并将产生的时间值填写进ITm(InsertTime)字段。每次刷新扫码登录界面时,都会往数据表中插入新的UUID。为防止数据表无限制扩大,在每次产生新值前,都会将产生时间超过60s的值予以删除。将此UUID和生成时间加密,与服务器访问URL拼接成字符串,将此字符串生成二维码图片。为了保证浏览器每次刷新页面时都重新加载图片,我们采用添加“v ersion越不重复的随机值”参数的形式,如:
企业号申请<img id二"KqImg"src二寓/static/userImg/OaQr-Code.jpg?version二j j LhSynTime札札"style二"width: 50%;">
在此页面加载完成后,插入定时检测函数:
<script>
function myrefresh()j
$.post("/pgOaQrcodeLogin",jIsOk:false札)
.success(function(data)j
S(location).attr(y href y,鸳/鸳);
札);
92
$(function()j
setInterval(y myrefresh()鸳,2500);
札);
</script〉
此函数,每隔2.5s,在用户无感知的情况下,都会向OA服务器进行AJAX查询。一旦查询到后台返回数据,即重新定向到OA主界面。
2.4手机扫码逻辑
用户用手机扫描二维码后,将连带上述U-UID、ITM值被导向本单位服务器的特定验证页面。
2.5验证页面设计
增加此专用页面,用来接收上步传来的参数。此页面调用服务号接口scope,为snsapi_userinfo 获取用户OpenID,同时解密UUID和ITM参数。对于新OpenID,转向新用户注册申请界面,要求填写用户名和身份证号,从而完成OpenID与操作员的绑定。如图2所示:
图2新用户注册界面
绑定的用户要经管理员后台授权。以后再次扫码登录,就会出现如图3所示的界面。
用户在手机端按下“确定登录”键后,服务器将向云数据库OA_Login表中键值为收到的UUID的记录写入此用户的OpenID。
在此步骤中,将解密的ITM时间和当前时间值放在一起比较,超过60s的,将被视为超时报错,要求用户重新扫码操作
。
3 * 0 F Sa 1 rx
斑・
i &:25
X 幵封大宇业鏤数薛字院
梁宏想好隔定登录基统吗?
(a R n 取 0W 国-2S 14j :25:3b}
图3确认登录界面
2.6 OA 服务器与扫码登录页面的内部交互
事实上,在扫码登录界面的请求下,OA 服务器
会定时查询OA_Login 表中键值为此UUID 的
OpenlD 字段值,一旦字段值不再为空,即设置会话 变量ssOPENID=OpenID,同时返回“OK ”状态码给扫 码登录界面。扫码登录界面AJAX 定时查询到此信
号后,重定向到OA 主界面,从而完成扫码登录,全 过程结束。
3结语
通过对OA 服务器进行升级改造,实现了它与 服务器的“沟通协调”,实现了老OA 系
统的扫码登录功能, 特别是通过单公众服 务号,完成了 OpenID 获取和用户身份验证,避免了 重复购买开放平台。同时,公众服务号所拥
有的OAuth2.0具备高安全性,这也使原OA 系统的 安全性得到了更好的保障。
由于建立起OA 系统与公众服务号之间的 联系,特别是拿到了 OpenID ,所以一些智能化的信
息推送成为可能,如向用户手机推送文件签批 进展情况、工资发放通知等,这是采用这一设计方案
的又一额外收获。
参考文献:
[1] 冯俊源.支持企业号的OA 管理信息系统的设计与
实现[D].广州:华南理工大学,2016.
[2] 邵富明.基于企业平台的校园移动OA 系统设计与
实现[J].职业,2018(22):120-121.
[3] 梁宏.基于微OA 的设计与实现[D].郑州:郑
州大学,2017.
[4] 腾讯公司.官方文档•[EB/OL].(2012-02-
20) [2020 -11 -08].https ://developers.weixin.qq/
doc/offiaccount/G etting_Started/Overview.html.
[责任编辑远征]
Design and Implementation of WeChat Code Scanning Login with Single Service Number
LIANG Hong 1葬, WEI Qing 2, LIU Zizhen 1葬, CHEN Kai 1遭
(LaSchool of Continuing Education,b.Library ,Kaifeng University ,Kaifeng 475004,Henan ;2.School of Computer and Information
Engine e ring, He nan University of Economics and Law , Zhengzhou 450046,He nan)
Absrtact : The traditional OA website needs to login by user name and password.If it is changed to WeChat code scanning login
function, it will greatly reduce the burden of users memorizing passwords.At present,the mainstream technical solution to achieve
WeChat code scanning login is through WeChat open platform. WeChat open platform is an independent system platform parallel to WeChat official account.It needs to be paid separately for registration. Now many units already own their official account number (WeChat).Can they complete the WeChat scan code function by single service number without purchasing additional WeChat open
platform account? This paper will discuss the design scheme and implementation path of this function through specific cases.At the same time,the scheme provided in this paper also has certain reference significance for the integration of traditional OA and
WeChat functions.
Key words : WeChat official account ;service number ;scan code login ;OA ;Golang
93
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论