默认情况下YApi安装完成后,就可以注册新用户了。如果YApi搭建在外网环境,那么大家就都可以来注册用户并且创建自己的项目。这样也没有大问题,除了自己创建的项目,其他项目是没有权限的,因为只有将注册用户加入到项目成员里,这时候才有对应项目的权限。
如果想避免无用的用户和无用的项目新增进来,可以禁止用户注册 yapi 平台,配置方式如下:在 config.json 添加 closeRegister:true
配置项。配置教程:内网部署 (hellosean1025.github.io)
禁止注册之后我们怎么新增用户呢?
方法一:我们想到了利用原来的注册接口:/api/user/reg。
POST http://localhost:3000/api/user/reg
{"email":"test@github.com","password":"*******"}
直接调用会提示 "禁止注册,请联系管理员",所以我们来修改一下Yapi的注册函数,让管理员可以新增用户。
找到vendors/server/controllers/user.js 中的注册函数 async reg(ctx) ,将判断条件修改一下
if (yapi.WEBCONFIG.closeRegister ) {
return (ctx.body = yapi.commons.resReturn(null, 400, '禁止注册,请联系管理员'));
}
替换为
if (yapi.WEBCONFIG.closeRegister && ((await this.checkLogin(ctx)) === false || this.getRole() !== 'admin')) {
return (ctx.body = yapi.commons.resReturn(null, 400, '禁止注册,请联系管理员'));
}
找到注册函数中设置Cookie的代码段this.setLoginCookie;加个判断,管理员新增用户时无需设置,如下:
if ((await this.checkLogin(ctx)) === false || this.getRole() !== 'admin') {
this.setLoginCookie(user._id, user.passsalt);
}
此时管理员就可以用Postman等工具调用注册接口来新增用户了,调用时务必带上Cookie。
Cookie获取方法:用管理员账号登录,打开浏览器开发者工具(通常是F12),随意点开YApi一个功能即可在请求头里找到,如
如果你是使用YApi的接口运行功能来创建用户,Cookie会被浏览器安全策略覆盖。需要修改 『chrome crossRequest』插件的 manifest.json 文件,在permissions中增加YApi的访问域名或IP,如
{
"manifest_version": 2,
"name": "cross-request",
"description": "YApi 跨域请求",
"version": "3.1",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [ "webRequest", "webRequestBlocking", "*://192.168.101.63:*/"],
"background":
{
"scripts" : [
"background.js"
]
},
"web_accessible_resources":[
"index.js"
],
"content_scripts": [{
"matches": ["http://*/*", "https://*/*"],
"js": [
"response.js"
],
"all_frames": true
}]
}
YApi接口运行设置教程:接口设置-教程 (hellosean1025.github.io)
YApi接口运行Cookie丢失解决方案:关于使用YAPI自定义Cookie丢失问题解决方案 · Issue #2032 · YMFE/yapi · GitHub
方法二:增加管理员新增用户接口
新增方法见Issue中siwuai的回答:
关于使用YAPI自定义Cookie丢失问题解决方案 · Issue #2032 · YMFE/yapi · GitHub