2. 将鼠标放在“Script”上,单击界面上出现的“+”,在弹出菜单中选择“脚 本”。
图1-18 脚本菜单
3. 在弹窗中,选中“创建一个新脚本”,在“名称”文本框中输入“login”,单击
“添加”。
图1-19 新增脚本
4. 在代码编辑器中插入如下脚本代码。
import * as buffer from"buffer";
import * as crypto from"crypto";
import * as db from"db";
//定义入参结构,帐号的用户名、密码为必需字段。若根据业务需要,需其校验他字段(例如验证码),则 根据帐号密码字段的格式进行新增即可。
@action.object({type:"param"}) export class ActionInput{
@action.param({type:'String', required:true, label:'string'}) username:string; //用户名
@action.param({type:'String', required:true, label:'string'}) password:string; //密码
@action.param({type:'String', required:true, label:'string'})
captcha:string; //验证码,本脚本只是为了校验帐号密码,因此用不到验证码,验证码也不是必需字 段。在实现业务用户后台登录的Flow中,Flow调用此脚本,需要判断验证码,所以在此脚本中添加了验证 码字段。}
//定义出参结构,结构中的字段可以根据业务需要按下方样例结构进行添加或减少。
@action.object({type:"param"}) export class ActionOutput{
@action.param({type:'String'}) msg:string;//登录信息 @action.param({type:'String'}) username:string;//用户名 @action.param({type:'String'}) userId:string;//用户ID
@action.param({type:'String'}) captcha:string;//验证码 }//使用数据对象PortalUser
@useObject(['PortalUser'])
@action.object({type:"method"}) export class Login{
//定义接口类,接口的入参为ActionInput,出参为ActionOutput @action.method({ input:'ActionInput', output:'ActionOutput'}) public login(input:ActionInput):ActionOutput{
let out =new ActionOutput();
"conjunction":"AND",
if(validate(user[0].passwordSalt, user[0].userPassword, input.password)){
out.msg ="登录成功!";
}function _salt(password:string, saltBuf: buffer.Buffer, encoding: buffer.Encoding=
buffer.Encoding.Base64):string{
const passwordBuf = buffer.from(password)
const crypt = crypto.pbkdf2(passwordBuf, saltBuf,1000,32, crypto.Hashs.SHA1) return crypt.toString(encoding)
}function validate(salt:string, userSaltedPassword:string, password:string, encoding: buffer.Encoding=
buffer.Encoding.Base64):boolean{
const saltBuf = buffer.from(salt, encoding);
const saltedPassword = _salt(password, saltBuf, encoding);
return saltedPassword === userSaltedPassword }
{"username":"test_cs",
"password":"Admin_1234",
"captcha":""
}
执行成功,会在“输出”页签返回查询结果。
图1-20 返回结果
7. 测试成功,单击编辑器上方 启用图标,发布脚本。
如何后台实现业务用户登录
业务用户在后台登录时,是使用自定义的服务编排来调用“帐号密码校验”脚本,查 询登录帐户密码,判断当前登录的帐号密码是否正确来实现“业务用户”后台登录功 能。所以“业务用户登录”服务编排开发的大致过程:先拖拽1个脚本图元,3个决策 图元以及3个赋值图元,再分别配置各个图元属性,然后配置各个图元之间连线类型,
最后保存启用。
以1.1中创建的“A”应用为例:
1. 在“我的应用”中,单击“A”应用,进入应用开发页面。
2. 在开发页面中,单击“目录”,创建一个Flow目录。
图1-21 创建目录
3. 将鼠标放在“Flow”上,单击界面上出现的“+”,在弹出菜单中选择“服务编 排”。
图1-22 选择服务编排
4. 选中“创建一个新的服务编排”,在“标签”和“名称”文本框中输入
“login”,并设置类型为“Autolaunched Flow”,单击“添加”。
图1-23 创建服务编排
5. 定义服务编排用到的变量。
a. 单击 ,展开全局上下文,再单击“变量”后的 ,设置参数名称为
“username”。
图1-24 新增变量
b. 重复上一步,定义其他变量。
需要定义的变量如下表所示。
表1-1 服务编排变量说明
名称(变量名称,唯一标识) 数据类型
username 文本
password 文本
captcha 文本
msg 文本
userId 文本
loginMsg 文本
说明
此服务编排是用来实现业务用户登录逻辑的,所以在这个服务编排中的变量需要包含 业务用户帐号密码校验脚本(在业务用户帐号密码校验(登录)脚本创建的)中使用 的全部参数字段(包含输入参数和输出参数)。若自定义登录脚本中包含额外字段,
在服务编排的变量中也需要相应添加。
c. 单击“公式”后的 ,在左侧公式弹窗中,设置“名称”为
“portalUserLogin”,“表达式”为“PORTALUSERLOGIN({!
username})”,单击“保存”。
图1-25 添加公式变量“portalUserLogin”
d. 参考上一步,创建公式变量“verifyCode”。
需要定义的变量如下表所示。
表1-2 公式变量说明
名称 表达式
portalUserLogin PORTALUSERLOGIN({!username})
verifyCode VERIFYCODEWITHTYPE({!captcha},"login")
6. 拖拽图元到服务编排画布,并配置图元的基本属性。
a. 从图元区分别拖拽脚本(1个)、决策(3个)、赋值(3个)图元到画布中,
排列,如下图所示。
图1-26 拖拽脚本(1 个)、决策(3 个)、赋值(3 个)图元
b. 选中“Script0”图元,在右侧基本信息中,设置“标签”为“查询用户”。
c. 参考上一步,设置其他图元的“标签”属性,具体值如下表所示。
表1-3 设置其他图元标签属性 名称(变量唯一标识,不需要修 改)
标签
Decision0 判断帐号密码
Decision1 判断是否包含验证码
Decision2 校验验证码
Assignment0 帐号密码错误 Assignment1 执行登录 Assignment2 验证失败
图1-27 修改后图元
7. 配置“查询用户”脚本图元。
a. 单击 ,指定图元对应的脚本名称 (SYL__login),并配置脚本的输入输出 参数。
图1-28 指定脚本
注意
对应的脚本是业务用户帐号密码校验(登录)脚本中创建发布的帐号密码校 验脚本。
若这里无法选择需要的脚本,请检查创建的脚本是否已发布。
b. 单击“全局上下文”,显示变量列表,从“变量”中,拖拽“username”、
“password”和“captcha”到“输入参数”下对应的“源”输入框中,在
“输出参数”下,单击4次“新增行”,依次添加下拉选项中的输出参数字 段,并从“变量”中拖拽相应的字段到“目标”输入框下,字段与变量对应 关系如下图所示。
注意
脚本图元中输入参数和输出个数和指定脚本中需要的输入参数字段数是一 致。若自定义脚本的输入参数有额外字段,额外的字段也需要同样操作。
请直接从全局上下文拖拽“变量”到对应的输入输出参数下,如果手动输入 请确认输入参数与全局上下文中变量的值一致。
图1-29 拖拽脚本的输入输出参数
8. 配置“判断帐号密码”决策图元。
a. 选择“判断帐号密码”图元,在右侧单击 图标,修改“默认”的“名称”
为“CheckFail”。
图1-30 修改“默认”结果名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为“CheckSuccess”,在
“可视”下单击“新增行”,并拖拽变量中的“msg”到“资源”下,设置
“比较符”为“==”,“值”为“"登录成功!"”。
注意
1. 请直接从全局上下文拖拽变量“msg”到“资源”下,如果手动输入请确 认输入参数与全局上下文中变量的值一致。
2. “登录成功!”需要与“login”登录脚本中的输出参数一致。
图1-31 修改可编辑的结果
9. 配置“判断是否包含验证码”决策图元。
a. 选择“判断是否包含验证码”图元,在右侧单击 图标,修改“默认”的
“名称”为“hasVerifyCode”。
图1-32 修改“默认”结果名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为“noVerifyCode”,在
“可视”下单击“新增行”,并拖拽变量中的“captcha”到“资源”下,设 置“比较符”为“==”,“值”为“""”。
图1-33 修改可编辑的结果
10. 配置“校验验证码”决策图元。
a. 选择“校验验证码”图元,在右侧单击 图标,修改“默认”的“名称”为
“verifyCodeFail”。
图1-34 修改“默认”名称
b. 单击“新增”,增加一个可编辑的结果,修改结果为
“verifyCodeSuccess”,在右侧选择“公式”,并从全局上下文中,拖拽
“verifyCode”到“公式”下。
图1-35 修改可编辑的结果
11. 配置“帐号密码错误”赋值图元。
选择“帐号密码错误”图元,在右侧单击 图标,单击“新增行”,从全局上下 文的“系统变量”中,拖拽“$Flow.ResMsg”到“赋值”下,并设置“操作符”
为“=”,拖拽“msg”到“值”;然后再单击新增行后,拖拽“系统变量”下的
“$Flow.ResCode”到“赋值”的“变量”下,设置“操作符”为“=”,设置
“值”为“"1"”。
注意
请直接从全局上下文拖拽变量到“值”下的对应位置,如果手动输入请确认输入 参数与全局上下文中变量的值一致。
图1-36 配置“帐号密码错误”图元
12. 配置“执行登录”赋值图元。
a. 选择“执行登录”图元,在右侧单击 图标,单击4次“新增行”。
b. 从全局上下文,拖拽“msg”等字段到“赋值”的“变量”下,并设置“操 作符”为“=”,然后再拖拽“值”下的各个值,具体字段对应关系,如下图 所示。
图1-37 拖拽“执行登录”赋值的变量及值
注意
请直接从全局上下文拖拽变量到“值”下的对应位置,如果手动输入请确认 输入参数与全局上下文中变量的值一致。
表1-4 变量与值对应关系
变量 操作符 值
loginMsg = portalUserLogin
msg = msg
username = username
userId = userId
13. 配置“验证失败”赋值图元。
选择“验证失败”图元,在右侧单击 图标,单击“新增行”,从全局上下文
“系统变量”,拖拽“$Flow.ResMsg”、“$Flow.ResCode”到“赋值”下,并 设置操作符为“=”,分别设置“值”为“"帐号或者密码错误!"”、“"1"”。
表1-5 赋值
变量 操作符 值
$Flow.ResMsg = "帐号或者密码错误!"
$Flow.ResCode = "1"
图1-38 配置“验证失败”赋值图元
14. 拖拽图元连线,并配置连线属性。
a. 在画布上,把鼠标放在起点图元 图元上,从“+”拖动鼠标,在起点图元 和“查询用户”图元间增加连线;即将当前脚本设置为服务编排的起始节 点。
b. 依次在“查询用户”、“判断帐号密码”、“判断是否包含验证码”、“执 行登录”图元直接拖拽连线。
图1-39 拖拽连线
c. 单击“判断帐号密码”与“判断是否包含验证码”图元之间的连线,再右侧 属性单击 ,在“连线”中修改“连线类型”为“CheckSuccess”。
图1-40 选中连线
图1-41 修改连线类型
d. 单击“判断是否包含验证码”与“执行登录”图元之间的连线,再右侧属性 单击 ,在“连线”中修改“连线类型”为“noVerifyCode”。
e. 从“判断帐号密码”图元上拖拽一条连线到“帐号密码错误”图元。
f. 从“判断是否包含验证码”图元上拖拽一条连线到“校验验证码”图元。
g. 从“校验验证码”图元上拖拽一条连线到“验证失败”图元。
h. 从“校验验证码”图元上拖拽一条连线到“执行登录”图元,并设置该连线 的“连线类型”为“verifyCodeSuccess”。
连线拖拽完成,如下图所示。
图1-42 拖拽图元连线
15. 定义服务编排的输入、输出参数,并保存服务编排。
a. 鼠标在画布空白处点一下,单击右侧 ,设置服务编排的输入输出参数,
如下图所示。
图1-43 拖拽服务编排的输入输出参数
注意
服务编排的输入参数是用来执行服务编排时输入的参数,同时也是执行帐号 密码校验脚本时的输入参数。所以当帐号密码校验脚本的有额外的输入参数 字段,服务编排的输入参数也需要同步增加。
服务编排的输出参数是执行帐号密码校验脚本时返回的参数,所以当帐号密 码校验脚本的有额外的输出参数字段,服务编排的输出参数也需要同步增 加。
b. 单击服务编排界面上部的 保存图标,保存服务编排。
系统会弹出窗口,显示编译结果。
16. 测试服务编排能否正常执行。
a. 单击服务编排编辑器上方 执行图标,进入服务编排测试页面。
图1-44 服务编排测试页面
b. 在“Flow Run”界面中输入测试数据,单击“运行”。其中“test_cs”、
“Admin_1234”为业务用户的帐号和密码。
“Admin_1234”为业务用户的帐号和密码。