可以使用 session.*,Captcha,PasswordValidateJwtMake,JwtValidate等处理器,实现自定义用户登录、用户身份鉴权。
可以在数据流、JS编写的处理器和数据表格中使用登录时候,设置的会话数据。
账号密码登录流程:
用户在登录页面,填写账号名称、验证码和密码,点击按钮提交到指定 API。
API 接收账号名和密码信息,转交指定的处理器,校验密码,签发 JWT 令牌。
处理器密码校验逻辑:
调用 CaptchaValidate 处理器,校验验证码。
调用数据模型处理器,通过账号名称查询用户数据记录,获得加密存储的密码信息。
调用 PasswordValidate 处理器,校验用户填写密码是否正确。
签发 JWT 令牌,设定会话信息。
编写 user.mod.yao
放置在应用 models
目录。
创建数据表 & 添加默认用户:
yao migrate -n user --reset
编写 /scripts/login.js
处理登录逻辑:
编写接口描述文件 /logins/user.login.yao
,把登录处理器指定为刚刚写的scripts.login.Login
描述文件内容:
接口调试:
启动服务:
yao start
读取验证码接口:
curl http://127.0.0.1:5099/api/__yao/login/user/captcha?type=digit
登录接口:
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.yao
的 action
,加入 刚刚写好的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"}
编写 user.js
放置在应用 scripts
目录。
function Inspect() {return Process("session.Get", "user");}
可直接在数据表格 apis.*.default
中引用会话变量。
可以使用 session.*,Captcha,PasswordValidateJwtMake,JwtValidate等处理器,实现自定义用户登录、用户身份鉴权。
可以在数据流、JS编写的处理器和数据表格中使用登录时候,设置的会话数据。
账号密码登录流程:
用户在登录页面,填写账号名称、验证码和密码,点击按钮提交到指定 API。
API 接收账号名和密码信息,转交指定的处理器,校验密码,签发 JWT 令牌。
处理器密码校验逻辑:
调用 CaptchaValidate 处理器,校验验证码。
调用数据模型处理器,通过账号名称查询用户数据记录,获得加密存储的密码信息。
调用 PasswordValidate 处理器,校验用户填写密码是否正确。
签发 JWT 令牌,设定会话信息。
编写 user.mod.yao
放置在应用 models
目录。
创建数据表 & 添加默认用户:
yao migrate -n user --reset
编写 /scripts/login.js
处理登录逻辑:
编写接口描述文件 /logins/user.login.yao
,把登录处理器指定为刚刚写的scripts.login.Login
描述文件内容:
接口调试:
启动服务:
yao start
读取验证码接口:
curl http://127.0.0.1:5099/api/__yao/login/user/captcha?type=digit
登录接口:
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.yao
的 action
,加入 刚刚写好的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"}
编写 user.js
放置在应用 scripts
目录。
function Inspect() {return Process("session.Get", "user");}
可直接在数据表格 apis.*.default
中引用会话变量。