公众号无代码开发平台 (无代码app开发平台)

无代码平台除了内置了组织机构管理,用户管理,角色管理,菜单管理,权限设置,字典维护,系统设置,日志管理等;还包含了数据源配置、库表维护、缓存维护等。

今天讲解一下无代码平台的登录服务逻辑控制,看看大家的用户需求是否都能满足?

注意:如果修改登录服务的话,逻辑修改错误的话,会造成登录不了系统[流泪]

一、进入服务配置

轻流无代码开发平台,无代码小程序开发平台

进入画面配置菜单-选中业务平台系统-看到登录相关模块

轻流无代码开发平台,无代码小程序开发平台

点击服务配置-看到第一个服务即是登录服务-双击打开

轻流无代码开发平台,无代码小程序开发平台

服务配置修改

check$$$【REQS.username】=null$$$登录用户名不能为空$$$checkusername
check$$$【REQS.password】=null$$$登录密码不能为空$$$checkpassword

checkvar$$$$$【SSSN.LOGINFO[_clientWay]】$$$loginfo

checkvar$$$$$【GRID.Service_BySQLkey[select 1,active_status,login_name from s_user where login_name='【REQS.username】' and del_flag='N' ]】$$$userdata
check$$$【REQS.userdata】=null$$$用户名或密码错误$$$checkdata

check$$$【REQS.userdata.get[0].active_status】$2$$$用户已经锁定,请联系管理员$$$checkdata

checkvar$$$【REQS.userdata】!=null$$$【GRID.Service_BySQLkey[select u.uuid,u.real_name,u.card_type,u.org_id,g.uuid orguuid,g.name org_name,g.type,u.sex,u.mobile,u.group_id,u.phone,u.email,u.user_type,u.sec_level,u.birthday,u.active_status,g.path,u.login_name,g.parent_id,edit_pwd_time from s_user u,s_org g where u.org_id=g.unit_code and u.login_name='【REQS.username】' and u.password='【REQS.password】' and u.del_flag='N' order by u.org_id limit 1]】$$$data
//查询用户所属多个机构列表
checkvar$$$【REQS.data】!=null$$$【GRID.Service_BySQLkey[select u.uuid,u.real_name,u.card_type,u.org_id,g.uuid orguuid,g.name org_name,g.type,u.sex,u.mobile,u.group_id,u.phone,u.email,u.user_type,u.sec_level,u.birthday,u.active_status,g.path,u.login_name,g.parent_id,edit_pwd_time from s_user u,s_org g where u.org_id=g.unit_code and u.login_name='【REQS.username】' and u.password='【REQS.password】' and u.del_flag='N'  order by u.org_id]】$$$orgList

check$$$【REQS.data】=null$$$用户名或密码错误$$$checkdata

checkvar$$$$$【SSSN.GETTOKEN】$$$token
checkvar$$$$$【FORM.Service_BySQLkey[select re_login,re_sta,chang_date,chang_sta,remind_date,remind_sta from s_system where org_id='【REQS.data.get[0].org_id】']】$$$resystem
checkvar$$$(【REQS.resystem】=null) or (【REQS.resystem】!=null@@【REQS.resystem.re_sta】==0)$$$【SSSN.REDISSAVE[【REQS.token】|data]】$$$savetoken
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.GETJSVAR[value_timeout|【REQS.resystem.re_login】*60]】$$$value_timeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.TOINT[【REQS.value_timeout】]】$$$timeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.REDISSAVE[token-timeout-【REQS.data.get[0].org_id】|timeout]】$$$savetokenTimeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.REDISSAVE[【REQS.token】|data|【REQS.timeout】]】$$$savetoken
//记录当前登录用户的token如果已经登录过则让前一个登录失效
checkvar$$$【SSSN.REDISHASKEY[【REQS.username】]】$Y$$$【SSSN.REDISGET[usernametoken|【REQS.username】]】$$$usernametoken
checkvar$$$【SSSN.REDISHASKEY[【REQS.username】]】$Y$$$【SSSN.REDISDEL[【REQS.usernametoken】]】$$$delusernametoken
checkvar$$$$$【SSSN.REDISSAVE[【REQS.username】|token]】$$$saveusernametoken
checkvar$$$$$【SSSN.REDISSAVE[【REQS._requestSessionId_】|token]】$$$savesessionidtoken

checkvar$$$$$【REQS.data.get[0].real_name】$$$real_name
checkvar$$$$$【REQS.data.get[0].type】$$$type
checkvar$$$$$【REQS.data.get[0].org_name】$$$org_name
checkvar$$$$$【REQS.data.get[0].edit_pwd_time】$$$edit_pwd_time
checkvar$$$$$【REQS.data.get[0].org_id】$$$unitcode
checkvar$$$【REQS.data】!=null$$$【REQS.data】$$$curUserMap
checkvar$$$$$【GRID.Service_BySQLkey[select * from css_file_config ]】$$$fileconfig
checkvar$$$$$【GRID.Service_BySQLkey[select * from s_dict where isdel = 'N' and parentid != '0' and table_type in ('-1','【REQS.curUserMap.type】') order by parentid,ordernum]】$$$dicts

checkvar$$$$$2.3$$$version
checkvar$$$$$Y$$$executesql

checkvar$$$$$【SSSN.GETMAP[returnData|token|real_name|unitcode|type|org_name|holidays|fileconfig|dicts|version|executesql|orgList|resystem|edit_pwd_time]】$$$returnData
RETURN returnData

二、逐行解释

check$$$【REQS.username】=null$$$登录用户名不能为空$$$checkusername
check$$$【REQS.password】=null$$$登录密码不能为空$$$checkpassword

说明:校验登录用户名密码,如果用户名为空,提示登录用户名不能为空;如果密码为空,提示登录密码不能为空。



说明:后台日志打印登录方式。【SSSN.LOGINFO】是后端控制台打印信息,方便运维查找问题。[]之间的内容可以分两种情况,如果在前台提交的内容或者在之前的变量定义中存在,则打印【REQS】中的变量值;如果都不存在,则直接打印;

轻流无代码开发平台,无代码小程序开发平台

打印效果-直接打印出_clientWay- PC端登录前台不传递- APP端登录会传递

checkvar$$$$$【GRID.Service_BySQLkey[select 1,active_status,login_name from s_user where login_name='【REQS.username】' and del_flag='N' ]】$$$userdata

说明:根据前台提交的用户名【REQS.username】查询数据库中的用户表,将查询结果放到变量userdata中,以便下面配置使用

check$$$【REQS.userdata】=null$$$用户名或密码错误$$$checkdata

说明:如果查询结果userdata为空,则直接提示给前台错误“用户名或密码错误”;

check$$$【REQS.userdata.get[0].active_status】$2$$$用户已经锁定,请联系管理员$$$checkdata

说明:如果查询结果集中第一条的active_status为2,则直接提示给前台“用户已经锁定,请联系管理员”;

checkvar$$$【REQS.userdata】!=null$$$【GRID.Service_BySQLkey[select u.uuid,u.real_name,u.card_type,u.org_id,g.uuid orguuid,g.name org_name,g.type,u.sex,u.mobile,u.group_id,u.phone,u.email,u.user_type,u.sec_level,u.birthday,u.active_status,g.path,u.login_name,g.parent_id,edit_pwd_time from s_user u,s_org g where u.org_id=g.unit_code and u.login_name='【REQS.username】' and u.password='【REQS.password】' and u.del_flag='N' order by u.org_id limit 1]】$$$data

说明:如果userdata不为空,则根据用户名密码两个条件一起查询数据库;如果之前的用用户名查询结果userdata为空,则就不需要再查询了;

checkvar$$$【REQS.data】!=null$$$【GRID.Service_BySQLkey[select u.uuid,u.real_name,u.card_type,u.org_id,g.uuid orguuid,g.name org_name,g.type,u.sex,u.mobile,u.group_id,u.phone,u.email,u.user_type,u.sec_level,u.birthday,u.active_status,g.path,u.login_name,g.parent_id,edit_pwd_time from s_user u,s_org g where u.org_id=g.unit_code and u.login_name='【REQS.username】' and u.password='【REQS.password】' and u.del_flag='N'  order by u.org_id]】$$$orgList

说明:如果userdata不为空,则根据用户名密码查询当前登录用户是否兼职在两个以上的部门;如果之前的查询结果data为空,则就不需要再查询了;

该配置是用于一个人兼职多个机构,登录成功后,在右上角可以下拉切换登录人所在机构。

check$$$【REQS.data】=null$$$用户名或密码错误$$$checkdata

说明:如果查询结果集为空,则直接提示给前台“用户或密码错误”;

checkvar$$$$$【SSSN.GETTOKEN】$$$token

说明:根据规则生成登录token

//查询系统设置中的登录超时时间,按照当前登录人的所属机构编码查询(即每个机构可以配置不同的登录超时时间)
checkvar$$$$$【FORM.Service_BySQLkey[select re_login,re_sta,chang_date,chang_sta,remind_date,remind_sta from s_system where org_id='【REQS.data.get[0].org_id】']】$$$resystem
checkvar$$$(【REQS.resystem】=null) or (【REQS.resystem】!=null@@【REQS.resystem.re_sta】==0)$$$【SSSN.REDISSAVE[【REQS.token】|data]】$$$savetoken
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.GETJSVAR[value_timeout|【REQS.resystem.re_login】*60]】$$$value_timeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.TOINT[【REQS.value_timeout】]】$$$timeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.REDISSAVE[token-timeout-【REQS.data.get[0].org_id】|timeout]】$$$savetokenTimeout
checkvar$$$【REQS.resystem】!=null@@【REQS.resystem.re_sta】==1$$$【SSSN.REDISSAVE[【REQS.token】|data|【REQS.timeout】]】$$$savetoken

说明:

1、查询系统设置中的登录超时时间,按照当前登录人的所属机构编码查询(即每个机构可以配置不同的登录超时时间)

2、如果当前机构下的系统设置未设置,或者设置了但是开启标志没有打开,则直接将token记录在redis中,不设置超时时间

轻流无代码开发平台,无代码小程序开发平台

系统设置

3、如果当前机构下的系统设置已经设置,且开启标志已经打开,则获取超时时间定义变量value_timeout

4、如果当前机构下的系统设置已经设置,且开启标志已经打开,则将token记录在redis中,对应的值为上面查询的用户信息结果data,且设置超时时间为系统设置中的超时时间

//记录当前登录用户的token如果已经登录过则让前一个登录失效
checkvar$$$【SSSN.REDISHASKEY[【REQS.username】]】$Y$$$【SSSN.REDISGET[usernametoken|【REQS.username】]】$$$usernametoken
checkvar$$$【SSSN.REDISHASKEY[【REQS.username】]】$Y$$$【SSSN.REDISDEL[【REQS.usernametoken】]】$$$delusernametoken
checkvar$$$$$【SSSN.REDISSAVE[【REQS.username】|token]】$$$saveusernametoken
checkvar$$$$$【SSSN.REDISSAVE[【REQS._requestSessionId_】|token]】$$$savesessionidtoken

说明:从redis中获取当前登录人的JSESSIONID与用户名之间的对照关系,记录在redis中,如果redis中用户名已经存在一个登录人的JSESSIONID,则删除掉;

该配置是用于保证一个用户名登录只能同时一人在线,如果有另一台机器用相同的用户名登录,则前一个人就会被踢出系统登录。

checkvar$$$$$【REQS.data.get[0].real_name】$$$real_name
checkvar$$$$$【REQS.data.get[0].type】$$$type
checkvar$$$$$【REQS.data.get[0].org_name】$$$org_name
checkvar$$$$$【REQS.data.get[0].edit_pwd_time】$$$edit_pwd_time
checkvar$$$$$【REQS.data.get[0].org_id】$$$unitcode
checkvar$$$【REQS.data】!=null$$$【REQS.data】$$$curUserMap

说明:定义用户姓名、当前登录所属机构的级别、所属机构名称、上次修改时间、所属机构编码、用户信息等变量,用于返回前台,为前台便于记录在Cookie或者session中,在其他页面直接使用。

checkvar$$$$$【GRID.Service_BySQLkey[select * from css_file_config ]】$$$fileconfig

说明:查询系统中的文件特殊处理配置,例如:每天几点到几点之间不允许上传和*载下**大于200M的文件,防止影响系统使用效果。返回给前台,前台在处理上传*载下**附件时可以根据配置判断是否可以操作。

checkvar$$$$$【GRID.Service_BySQLkey[select * from s_dict where isdel = 'N' and parentid != '0' and table_type in ('-1','【REQS.curUserMap.type】') order by parentid,ordernum]】$$$dicts

说明:查询系统中的字典项,返回前台,用于前台代码转名称的字典项操作,其他功能中如果是使用字典项列表,字典项下拉等,无需再次查询数据库,也无需使用业务表和字典项表关联查询,前台页面会自动进行字典项转换。

checkvar$$$$$2.3$$$version

说明:配置当下系统画面配置的版本,返回给前台,如果前台的记录的版本号小于当前版本号,自动清除本地缓存中的画面配置信息,会再次调用后端服务查询,否则直接获取前台浏览器中的画面配置信息即可。

用户也可以手工清除前台缓存的画面配置信息:

轻流无代码开发平台,无代码小程序开发平台

清除缓存

checkvar$$$$$Y$$$executesql

说明:是否放开库表维护功能中的查询SQL功能

轻流无代码开发平台,无代码小程序开发平台

checkvar$$$$$【SSSN.GETMAP[returnData|token|real_name|unitcode|type|org_name|holidays|fileconfig|dicts|version|executesql|orgList|resystem|edit_pwd_time]】$$$returnData
RETURN returnData

说明:将希望返回前台的内容组装后返回。