uniapp云函数安装uni-id

为什么需要uni-id

99%的应用,都要开发用户注册、登录、发送短信验证码、密码加密保存、修改密码、token管理等功能

uni-iduniCloud开发者提供了简单、统一、可扩展的用户管理能力封装。

直白的说,就是避免重复造轮子,人家官方已经我们造好了,只需要拿来用就行

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

img

导入到HBuilder,选择我们的项目

导入项目之后,会在uni_modules目录下,多出两个文件夹,uni-config-center和uni-id

我们在在uni_modules\uni-config-center\uniCloud\cloudfunctions\common\uni-config-center这个目录下创建uni-id目录

img

在创建的uni-id目录下再创建config.json文件

img

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

img

云数据库增加uni-id数据表
在uniCloud目录上右键,打开数据库管理界面

img

新建数据库表

img

img

新建数据库表,可以勾选全部表,也可以选自己需要的表,但是uni-id-users这个表一定要有

img

回到HBuilder X工具,在database目录下右键下载新增加的表

img

到此uni-id全部配置完毕

如何使用uni-id?

后面需要用到的uni-id的云函数还有一步操作,就是要在所需uni-id的云函数目录上右键选择管理公共模块依赖添加uni-id到云函数里

以云函数login为例

img

勾选uni-id

img

login云函数代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 云函数register的代码
const uniID = require('uni-id')
exports.main = async function(event,context) {
const {
username,
password
} = event
//自己额外增加的校验密码规范的逻辑(可选)
//强弱密码校验,密码至少包含大写字母,小写字母,数字,且不少于6位
if(!/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[^]{6,16}$/.test(password)){
return {
code: 401,
msg: '密码至少包含大写字母,小写字母,数字,且不少于6位'
}
}
// 自动验证用户名是否与已经注册的用户名重复,如果重复会直接返回错误。否则会自动生成token并加密password存储username、password、token到数据表uni-id-users,并返回如上响应参数
const res = await uniID.register({ //支持传入任何值,比如可以直接传入mobile即可设置手机号码,切勿直接传入event否则这是一个极大的安全问题
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) {
// 2.8.0版本起调整为蛇形uni_id_token(调整后在一段时间内兼容驼峰uniIdToken)
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用户体系


uniapp云函数安装uni-id
https://thaneyang.github.io/2023/02/uniapp云函数安装uni-id.html
作者
ThaneYang
发布于
2023年2月18日
许可协议