介绍

官方文档:https://uniapp.dcloud.io/uniCloud/uni-id

======================

1、创建 Uni-id

建议直接通过引入 uni-admin 的方式创建,这个是整合了 Uni-config-center 配置中心 + Uni-id 用户体系,组成的注册、修改信息、停用启用、删除、角色管理、权限管理的框架。
https://uniapp.dcloud.io/uniCloud/admin

直接在 HBuilderX 中创建 uniCloud admin 项目即可
image.png
创建后,直接自带一个官方编写好的 uni-id-cf 云函数,里面包含了登录、注册、获取验证码等等方法,通过调用这个云函数时传入一个属性action,来决定调用什么方法。

这种方式的好处,可以查看 https://www.yuque.com/yejielin/mypn47/pql48r#pbQHt,主要是云函数可以一直热启动,保持运行性能。
image.png

2、默认配置说明(重要)

位置

image.png
默认配置在云函数里面的公共模块,配置中心里面,uni-id 文件夹的config.json

配置说明:https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=config

注意事项(重要)

注意!json配置里面,不能有注释//,否则会报错!!!

修改配置

直接改上图里面的 config.json 文件即可。
里面的属性参考配置说明。

3、首次使用创建超级管理员

点下项目,点右上角的“浏览”,HBuilderX 会编译并打开内置的web浏览器
image.png
点击如下,即可创建超级管理员账号
image.png image.png

同时云数据库 的id表,会多一个超级管理员账号
image.png

目前只有这个方法创建超级管理员,如果是直接往这个表添加记录可能会有点问题,比如这里的密码是根据配置里面的 passwordSecret 属性加密过的。

4、通用的云函数 uni-id-cf

说明

image.png
云函数下,如果是通过uni-admin 创建的,会自带一个官方写好的云函数 uni-id-cf

云函数的功能包含了注册、登录、获取验证码、修改用户信息等等。

你可以通过前端直接请求这个云函数,加上action属性设置不同的行为,就可以得到不同的结果。

函数运行全解析

UniCloud模块 - Uni-id - 图9

5、云函数url化后的uni-id(重点)

如果你想把uni-admin整个项目作为后端,可以把云函数url化,然后用你的前端发送请求,去请求云函数的url即可。

但是有几点要注意!

注意1:需要配置APPID

配置中心里面,uni-id 文件夹的config.json,一定要写上appid,这个appid可以通过项目中的 manifest.json 查看得到,只要你在HBuilderX中登录了账号,项目关联了云空间,就一定会有appid
image.png
UNICloud做了应用级用户隔离,不同的appid是无法相互访问的,如果没有appid,上面创建的超级管理员账号,你的前端永远无法访问,一直提示用户不存在

因为不同的appid,系统当做不同的应用,无法相互访问

注意2:创建uni-id实例需要appid

由于云函数url化,你前端的请求uni-id无法正常获取云函数的context,因此要手动设置,如下:
context.PLATFORM = ‘h5’
context.APPID = uniIdConfig.service.univerify.appid

  1. // cloudfunctions/uni-id-cf
  2. // 上面省略了代码
  3. // 云函数
  4. exports.main = async (event, context) => {
  5. // 设置平台
  6. context.PLATFORM = 'h5'
  7. // 设置APPID,云函数url化,一定要配置appid
  8. context.APPID = uniIdConfig.service.univerify.appid
  9. // 2、创建 uni-id 实例 ,后续使用 uni-id 调用相关接口
  10. // UNI_WYQ:这里的uniID换成新的,保证多人访问不会冲突
  11. uniID = uniID.createInstance({
  12. context
  13. })
  14. // 下面省略了代码

理由同注意1

注意3:云函数event不一样

在uni项目中通过 uni.callfunction 调用云函数,传入的event参数,

云函数url化,你通过其他项目前端请求云函数,传入的event参数,

两个是完全不一样的。

uni.callfunction 的event:

  1. event:{
  2. action:"login",
  3. params:{
  4. username:"1231321",
  5. password:"123123213213123",
  6. captchaOptions:{"deviceId":"123213213","scene":"login"}
  7. }
  8. }

你前端请求的event:

  1. {
  2. path: 'HTTP请求路径,如 /hello',
  3. httpMethod: 'HTTP请求方法,如 GET',
  4. headers: {HTTP请求头},
  5. queryStringParameters: {HTTP请求的Query,键值对形式},
  6. body: 'POST方法的data属性,为JSON格式,要自己转一下',
  7. isBase64Encoded: 'true or false,表示body是否为Base64编码'
  8. }

因此你的云函数,获取前端请求的参数,需要如下处理一下,兼顾两种不同的event

  1. // 3、获取前端请求过来的参数
  2. /*
  3. event为客户端 uniCloud.callFunction填写的data的值,这里介绍一下其中的属性
  4. action:表示要执行的任务名称、比如:登陆login、退出登陆 logout等
  5. params:业务数据内容
  6. uniIdToken:系统自动传递的token,数据来源客户端的 uni.getStorageSync('uni_id_token')
  7. */
  8. let requestBody = {}
  9. if(event.body){
  10. requestBody = JSON.parse(event.body)
  11. }
  12. let {
  13. uniIdToken,
  14. inviteCode,
  15. } = event;
  16. const deviceInfo = event.deviceInfo || {};
  17. let action = event.action || requestBody.action;
  18. let params = event.params || requestBody.params;