为什么需要uni-id
99%的应用,都要开发用户注册、登录、发送短信验证码、密码加密保存、修改密码、token管理等功能
uni-id
为uniCloud
开发者提供了简单、统一、可扩展的用户管理能力封装。
直白的说,就是避免重复造轮子,人家官方已经我们造好了,只需要拿来用就行
uni-id
已完成的内容:
- 注册、登录、发送短信验证码、密码加密保存、修改密码、token管理(短信验证码功能需要HBuilderX 2.8.3+)
- App手机号一键认证,免验证码
- 三方登录:App中的微信登录和Apple ID、微信小程序中的微信登录、支付宝小程序中的支付宝账户登录
- rbac权限角色体系
如何在项目中安装uni-id
我们选择uni_modules版本来安装
首页,我们保证项目的uniCloud已经有关联的云服务空间
然后,我们打开uni-id插件
https://ext.dcloud.net.cn/plugin?id=2116
导入到HBuilder,选择我们的项目
导入项目之后,会在uni_modules目录下,多出两个文件夹,uni-config-center和uni-id
我们在在uni_modules\uni-config-center\uniCloud\cloudfunctions\common\uni-config-center这个目录下创建uni-id目录
在创建的uni-id目录下再创建config.json文件
config.json内容如下,只需要自定义配置前面两个参数passwordSecret和tokenSecret即可,其它参数暂时用不到,使用官方默认的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| { "passwordSecret": "yzw-weixin-h5", "tokenSecret": "yzw-weixin-h5", "tokenExpiresIn": 7200, "tokenExpiresThreshold": 600, "passwordErrorLimit": 6, "passwordErrorRetryTime": 3600, "autoSetInviteCode": false, "forceInviteCode": false, "app-plus": { "tokenExpiresIn": 2592000, "oauth" : { "weixin" : { "appid" : "weixin appid", "appsecret" : "weixin appsecret" }, "apple": { "bundleId": "your APP bundleId" } } }, "mp-weixin": { "oauth" : { "weixin" : { "appid" : "weixin appid", "appsecret" : "weixin appsecret" } } }, "mp-alipay": { "oauth" : { "alipay" : { "appid" : "alipay appid", "privateKey" : "alipay privateKey" } } }, "service": { "sms": { "name": "your app name", "codeExpiresIn": 180, "smsKey": "your sms key", "smsSecret": "your sms secret" }, "univerify": { "appid":"your appid", "apiKey": "your apiKey", "apiSecret": "your apiSecret" } } }
|
此时在uniCloud\cloudfunctions\common下就会有uni-config-center和uni-id两个文件,对应的就是uni_modules目录下的这两个文件,可以理解为uni_modules快捷方式到了uniCloud目录下
将uni-config-center和uni-id这两个文件上传到云端,先上传uni-config-center公共模块,再上传uni-id
云数据库增加uni-id数据表
在uniCloud目录上右键,打开数据库管理界面
新建数据库表
img
新建数据库表,可以勾选全部表,也可以选自己需要的表,但是uni-id-users这个表一定要有
回到HBuilder X工具,在database目录下右键下载新增加的表
到此uni-id全部配置完毕
如何使用uni-id?
后面需要用到的uni-id的云函数还有一步操作,就是要在所需uni-id的云函数目录上右键选择管理公共模块依赖添加uni-id到云函数里
以云函数login为例
勾选uni-id
login云函数代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const uniID = require('uni-id') exports.main = async function(event,context) { const { username, password } = event if(!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{6,16}$/.test(password)){ return { code: 401, msg: '密码至少包含大写字母,小写字母,数字,且不少于6位' } } const res = await uniID.register({ username, password }) return res }
|
客户端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| uniCloud.callFunction({ name: 'register', data: { username: 'username', password: 'user password' }, success(res){ if(res.result.code === 0) { uni.setStorageSync('uni_id_token',res.result.token) uni.setStorageSync('uni_id_token_expired', res.result.tokenExpired) uni.showToast({ title: '注册成功', icon: 'none' }) } else { uni.showModal({ content: res.result.message, showCancel: false }) } }, fail(){ uni.showModal({ content: '注册失败,请稍后再试', showCancel: false }) } })
|
参考资料
uni-id用户体系