使用会话数据

可以使用 session.*,Captcha,PasswordValidateJwtMake,JwtValidate等处理器,实现自定义用户登录、用户身份鉴权。

可以在数据流、JS编写的处理器和数据表格中使用登录时候,设置的会话数据。

账号密码登录

账号密码登录流程:

  1. 用户在登录页面,填写账号名称、验证码和密码,点击按钮提交到指定 API。

  2. API 接收账号名和密码信息,转交指定的处理器,校验密码,签发 JWT 令牌。

处理器密码校验逻辑:

  1. 调用 CaptchaValidate 处理器,校验验证码。

  2. 调用数据模型处理器,通过账号名称查询用户数据记录,获得加密存储的密码信息。

  3. 调用 PasswordValidate 处理器,校验用户填写密码是否正确。

  4. 签发 JWT 令牌,设定会话信息。

第一步: 用户数据模型

编写 user.mod.yao 放置在应用 models 目录。

查看源码

创建数据表 & 添加默认用户:

yao migrate -n user --reset

第二步: 登录处理器

编写 /scripts/login.js处理登录逻辑:

查看源码
技巧:通过js来处理复杂逻辑,把验证密码,签发令牌等复杂操作写在js脚本中.
技巧: 为便于调试,可在登录逻辑调试成功后,添加验证码校验节点。
注意:由于一些历史原因, yao 内建的登录界面登录提交信息中,用户字段名称固定为mobile, 在后续的版本中将允许在应用描述文件中定义。

第三步: 设置登录 API

编写接口描述文件 /logins/user.login.yao,把登录处理器指定为刚刚写的scripts.login.Login

描述文件内容:

查看源码

接口调试:

启动服务:

yao start

读取验证码接口:

curl http://127.0.0.1:5099/api/__yao/login/user/captcha?type=digit
技巧:设置环境变量开启 debug mode , 发起请求后,可以在服务日志中查看验证码 id 和 code, 用于调试。

登录接口:

curl -X POST http://127.0.0.1:5099/api/__yao/login/user \
-H 'Content-Type: application/json' \
-d '{"mobile":"zhang@yaoapps.com", "password": "5MCIXQYrR", "captcha":{"id":1024, "code":"xv98"}}'

使用会话数据

用户成功登录设定的会话数据,可以在数据流, JS 脚本和数据表格中使用。

在数据流中使用

编写 inspect.flow.yao 放置在应用 flows/user/ 目录。

{
"label": "当前用户信息",
"version": "1.0.0",
"description": "当前用户信息",
"nodes": [
{
"name": "会话",
"process": "session.Get",
"args": ["user"]
},
{
"name": "打印",
"process": "xiang.helper.Print",
"args": ["{{$res.会话}}"]
}
],
"output": "{{$res.会话}}"
}

运行调试:

修改/tables/product.tab.yaoaction,加入 刚刚写好的before:search

"action": {
"bind": { "model": "product" },
"save": {
"guard": "scripts.guard.Validate"
},
"before:search": "flows.user.inspect"
},

启动服务,开启调试模式:

yao start --debug

登录后,访问菜单产品列表 http://127.0.0.1:5099/admin/x/Table/product可以看到控制台打印的用户信息:

{
"email": "xiang@iqka.com",
"extra": {
"sex": "男"
},
"id": 1,
"mobile": null,
"name": "管理员",
"status": "enabled",
"type": "admin"
}

在 JS 脚本中使用

编写 user.js 放置在应用 scripts 目录。

function Inspect() {
return Process("session.Get", "user");
}

在数据表格中使用

可直接在数据表格 apis.*.default 中引用会话变量。

查看源码

使用会话数据

可以使用 session.*,Captcha,PasswordValidateJwtMake,JwtValidate等处理器,实现自定义用户登录、用户身份鉴权。

可以在数据流、JS编写的处理器和数据表格中使用登录时候,设置的会话数据。

账号密码登录

账号密码登录流程:

  1. 用户在登录页面,填写账号名称、验证码和密码,点击按钮提交到指定 API。

  2. API 接收账号名和密码信息,转交指定的处理器,校验密码,签发 JWT 令牌。

处理器密码校验逻辑:

  1. 调用 CaptchaValidate 处理器,校验验证码。

  2. 调用数据模型处理器,通过账号名称查询用户数据记录,获得加密存储的密码信息。

  3. 调用 PasswordValidate 处理器,校验用户填写密码是否正确。

  4. 签发 JWT 令牌,设定会话信息。

第一步: 用户数据模型

编写 user.mod.yao 放置在应用 models 目录。

查看源码

创建数据表 & 添加默认用户:

yao migrate -n user --reset

第二步: 登录处理器

编写 /scripts/login.js处理登录逻辑:

查看源码
技巧:通过js来处理复杂逻辑,把验证密码,签发令牌等复杂操作写在js脚本中.
技巧: 为便于调试,可在登录逻辑调试成功后,添加验证码校验节点。
注意:由于一些历史原因, yao 内建的登录界面登录提交信息中,用户字段名称固定为mobile, 在后续的版本中将允许在应用描述文件中定义。

第三步: 设置登录 API

编写接口描述文件 /logins/user.login.yao,把登录处理器指定为刚刚写的scripts.login.Login

描述文件内容:

查看源码

接口调试:

启动服务:

yao start

读取验证码接口:

curl http://127.0.0.1:5099/api/__yao/login/user/captcha?type=digit
技巧:设置环境变量开启 debug mode , 发起请求后,可以在服务日志中查看验证码 id 和 code, 用于调试。

登录接口:

curl -X POST http://127.0.0.1:5099/api/__yao/login/user \
-H 'Content-Type: application/json' \
-d '{"mobile":"zhang@yaoapps.com", "password": "5MCIXQYrR", "captcha":{"id":1024, "code":"xv98"}}'

使用会话数据

用户成功登录设定的会话数据,可以在数据流, JS 脚本和数据表格中使用。

在数据流中使用

编写 inspect.flow.yao 放置在应用 flows/user/ 目录。

{
"label": "当前用户信息",
"version": "1.0.0",
"description": "当前用户信息",
"nodes": [
{
"name": "会话",
"process": "session.Get",
"args": ["user"]
},
{
"name": "打印",
"process": "xiang.helper.Print",
"args": ["{{$res.会话}}"]
}
],
"output": "{{$res.会话}}"
}

运行调试:

修改/tables/product.tab.yaoaction,加入 刚刚写好的before:search

"action": {
"bind": { "model": "product" },
"save": {
"guard": "scripts.guard.Validate"
},
"before:search": "flows.user.inspect"
},

启动服务,开启调试模式:

yao start --debug

登录后,访问菜单产品列表 http://127.0.0.1:5099/admin/x/Table/product可以看到控制台打印的用户信息:

{
"email": "xiang@iqka.com",
"extra": {
"sex": "男"
},
"id": 1,
"mobile": null,
"name": "管理员",
"status": "enabled",
"type": "admin"
}

在 JS 脚本中使用

编写 user.js 放置在应用 scripts 目录。

function Inspect() {
return Process("session.Get", "user");
}

在数据表格中使用

可直接在数据表格 apis.*.default 中引用会话变量。

查看源码