百宝云登录授权系统
登录授权系统的功能就是:只有授权的用户机器才能使用我们开发的软件,非授权的机器是不能使用软件的。
下面我们就依次来学习怎么实现这个系统?
2.1登录系统设计图如下:
2.2授权系统的相关功能模块实现
2.2.1授权系统的相关数据库操作
/数据库相关操作专用文件
// 创建数据库
功能 mySql创建数据库()
变量 返回数组,ret
ret = sqlite数据库执行返回数组("授权数据库.db","create table IF NOT EXISTS userInfo(id integer primary key autoincrement,name,macid,islogin,isBlackUser)",返回数组)//创建表
如果(!ret)
发送文本消息("创建表失败:"& 获取错误信息(1))
返回 假
否则
返回 真
结束
结束
// 向数据里添加一条数据
功能 mySql插入数据(name,macid)
变量 retArray = null,inserText
inserText = 字符串格式化("insert into userInfo(name,macid,islogin,isBlackUser) values('%s','%s','false','false')",name,macid)
变量 ret = sqlite数据库执行返回数组("授权数据库.db",inserText,retArray)
如果(ret)
发送文本消息("插入一条新的数据")
返回 retArray
否则
发送文本消息("插入数据失败,原因:"&获取错误信息(1))
返回 null
结束
结束
// 查询所有信息
功能 mySql查询所有信息()
变量 sqlstr = "select * from userInfo"
变量 返回数组,ret
ret = sqlite数据库执行返回数组("授权数据库.db",sqlstr,返回数组)
//sendtextmsg("查询结果:"&返回数组)
返回 返回数组
结束
// 查询所有信息By name macID
功能 mySql查询所有信息ByNameMacID(name,macID)
变量 sqlstr = 字符串格式化("select * from userInfo where name='%s' and macid='%s'",name,macID)
变量 返回数组,ret
ret = sqlite数据库执行返回数组("授权数据库.db",sqlstr,返回数组)
返回 返回数组
结束
// 允许登录
功能 mySql允许登录ByName(name)
变量 返回数组,ret
变量 sqlstr = 字符串格式化("select * from userInfo where name='%s'",name)
ret = sqlite数据库执行返回数组("授权数据库.db",sqlstr,返回数组)
如果(ret && 返回数组 != null)
sqlstr = 字符串格式化("update userInfo set islogin='true' where name='%s'",name)
ret = sqlite数据库执行返回数组("授权数据库.db",sqlstr,返回数组)
如果(!ret)
发送文本消息("sql允许登录ByName失败,原因:"&获取错误信息(1))
结束
返回 真
否则
发送文本消息("数据库没有名称为:"&name&"的数据,修改失败")
返回 假
结束
结束
2.2.2授权系统的验证与交互界面的实现
变量 当前用户名 = ""
// 程序入口功能
功能 _initial()
发送文本消息("登录系统启动")
mySql创建数据库()
结束
<pre name="code" class="html">// 按下主按钮触发的功能方法
功能 _mainbutton()
发送文本消息("你好mainbutton")
结束
功能 _mainbutton()
发送文本消息("你好mainbutton")
结束
// arg1在这里为用户名或者注册码
// arg2在这里为机器码
功能 _userlogin(token,arg1,arg2,out_ret)
发送文本消息("arg1="&arg1&" arg2="&arg2)
如果(!效验用户(arg1,arg2))
返回 假 // 效验失败,不允许登录
否则
// 验证成功就直接登录
返回 真
结束
返回 真
结束
功能 效验用户(name,macID)
// 根据mane与macID一起查询
变量 查询数据 = mySql查询所有信息ByNameMacID(name,macID)
如果(查询数据 != null)
如果(查询数据[0]["islogin"] == "true")
发送文本消息(name&"登录成功")
返回 真
否则
发送文本消息(name&"未授权,不运行登录")
返回 假
结束
否则
mySql插入数据(name,macID)
// sendconfigconfirm("授权","是否为下面的用户授权登录?","用户","待授权用户:"& name,"yesno","待授权")
结束
返回 假
结束
功能 _loadconfig()
变量 arr = 数组("未授权用户","已授权用户","退出")
变量 ret = 格式化单选框配置("UI_主界面",arr,"授权系统,查看未授权与已授权用户!","主界面")
返回 ret
结束
//交互界面的事件的枢纽,用户在app中点击所有交互界面中的控件,都会经过这个函数
功能 _submitconfig(id,value)
发送文本消息("_submitconfig id:"&id&" value:"&value)
// 在主界面上的操作
如果(id == "UI_主界面")
如果(value == "未授权用户")
返回 "config_未授权用户列表"
否则如果(value == "已授权用户")
返回 "config_已授权用户列表"
否则
返回 "exit" // 退出交互界面
结束
结束
// 在未授权界面上的操作
如果(id == "UI_未授权用户")
当前用户名 = value
返回 "config_是否授权当前用户"
结束
// 在确认授权界面上的操作
如果(id == "UI_确认授权用户")
如果(value == "yes")
对当前用户授权()
返回 "exit"
否则
返回 "config_未授权用户列表"
结束
结束
// 未做任何处理就退出交互界面,避免出现错误页面
返回 "exit" // 退出交互界面
结束
功能 对当前用户授权()
如果(mySql允许登录ByName(当前用户名))
发送文本消息("对用户:"&当前用户名&"授权成功")
否则
发送文本消息("对用户:"&当前用户名&"授权失败")
结束
结束
// 未授权用户列表界面
功能 config_未授权用户列表()
//发送文本消息("config_未授权用户列表 11")
变量 用户列表 = mySql查询所有信息()
变量 待授权列表 = 数组()
变量 size = 数组大小(用户列表)
遍历(变量 i = 0; i < size; i++)
如果(用户列表[i]["islogin"] == "false")
关联数组追加元素(待授权列表,用户列表[i]["name"])
结束
结束
返回 格式化单选框配置("UI_未授权用户",待授权列表,"未授权的用户列表","未授权用户")
结束
// 已授权用户列表界面
功能 config_已授权用户列表()
变量 用户列表 = mySql查询所有信息()
变量 已授权列表 = 数组()
变量 size = 数组大小(用户列表)
遍历(变量 i = 0; i < size; i++)
如果(用户列表[i]["islogin"] == "true")
关联数组追加元素(已授权列表,用户列表[i]["name"])
结束
结束
返回 格式化单选框配置("UI_已授权用户",已授权列表,"已授权的用户列表","已授权用户")
结束
// 确定是否对选择的用户进行授权的界面
功能 config_是否授权当前用户()
返回 格式化确认框配置("UI_确认授权用户","是否对当前选择的用户授权登录?",当前用户名)
结束
2.3授权系统的软件端功能实现
软件端的代码是TC代码,主要是使用了百宝云提供的COM插件来实现的。详情见下面代码:
主界面的代码处理如下:
变量线程ID,bby
功能 授权测试端_初始化()
//这里添加你要执行的代码
注册插件("rc:t_baibaoyun.dll",假)
如果(!是否注册("bby.soft"))
注册插件("rc:t_baibaoyun.dll",真)
结束
bby = 插件("bby.soft")
变量 ver = bby.ver()
调试输出(ver)
如果(0 != bby.reg("abin","e31b226281a6a5f026ba2033c946c148"))
调试输出("注册失败")
结束
如果(101 != 控件模态窗口("登录授权"))
退出()
结束
结束
主要就是在界面的初始化里添加对COM插件的注册、插件对象的创建、reg接口执行与目标云应用的关联。
子界面:登录界面的处理
效果图
代码:
//开始按钮_点击操作
功能 登录授权_开始_点击()
变量 name = 编辑框获取文本("name","登录授权")
变量 macid = bby.getmac()
变量 buffer = 0
如果(bby.login(name,macid,buffer) == 0)
调试输出("已经是授权用户")
控件关闭子窗口("登录授权",101)
否则
消息框("未授权用户")
结束
返回 真
结束
//退出按钮_点击操作
功能 登录授权_退出_点击()
退出()
返回 真
结束