uniCloud uni-id体系的使用

目录

 简介

uni-id导入和配置

用户表与文章表关联foreignKey

字段级权限控制

指定数据集权限控制

权限规则的变量和运算符


 简介

uni-id已完成的功能:

  • 注册、登录、发送短信验证码、密码加密保存、修改密码、忘记密码、头像管理、token管理、rbac权限角色体系、页面访问权限路由控制、用户邀请裂变、用户签到、日志记录、账户防刷

关于登录方式,目前已实现

  • 账户密码登录
  • 手机号+短信验证码登录 (内置uniCloud短信能力)
  • App手机号一键认证,免验证码(内置uni-app App一键登录能力)
  • 三方登录:App中的微信登录、Apple ID、QQ登录;微信小程序中的微信登录;支付宝小程序中的支付宝账户登录;QQ小程序中的QQ登录

由于三方登录很多,DCloud没有精力全部实现,在uni-id-co中留下了空实现,欢迎开发者自行补充、提交pr或发布扩展插件,共同完善uni-id。。

后续计划:DCloud未来将内置 微信扫码登录和公众号登录、邮箱验证集成、facebook等海外主流社交账户登录、活体检测。

其他方面,各种常见开源项目如discuz、wordPress、ecshop的用户导入插件,不属于uni-id主工程,欢迎开发者单独提交插件到插件市场。


uni-id贯穿了uni-app前端到uniCloud后端的各个环节。

模块 说明
前端uni-app框架的相关API uniIdRouter页面路由、token管理客户端API
前端页面uni-id-pages 登录、注册、修改密码、忘记密码、个人中心、修改头像等前端页面
网络传输自动管理用户token 自动保存、续期token、网络自动传输token
云端云对象uni-id-co 与uni-id-pages搭配的云对象,相关业务的云端部分
云端配置uni-config-center 在uni-config-center下提供各种配置
云端公共模块uni-id-common 用于云函数或云对象集成该模块验证token身份
云数据库的用户相关数据表 uni-id-users等各种opendb数据表
uni-admin Admin管理后台,包括用户角色权限管理、注册用户统计

uni-id导入和配置

  • HBuilderX 3.1.0+
  • 插件市场导入uni-id公用模块uni_modules版本,HBuilderX会自动导入依赖的uni-config-center,插件市场 uni-id 
  • 在uni-config-center公用模块下创建uni-id目录,在创建的uni-id目录下再创建config.json文件配置uni-id所需参数(请参考下面config.json的说明)

uni-id的云端配置文件在uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json中。

注意:

  • config.json是一个标准json文件,不支持注释

配置项:

  • passwordSecret为用于加密密码入库的密钥
  • tokenSecret为生成token需要的密钥
  • tokenExpiresIntoken有效期,以秒为单位
  • passwordErrorLimit密码错误重试次数,分ip记录密码错误次数,达到重试次数之后等待passwordErrorRetryTime时间之后才可以重试
  • passwordErrorRetryTime单位为秒
  • 如果使用sendSmsCode接口发送短信需要前往uniCloud控制台开通并充值,配置config.jsonservice字段,字段说明见下方示例
  • 另外可以按照客户端平台进行不同的配置,参考下面示例

下面的配置文件中所有时间的单位都是秒

!!!重要!!! passwordSecret与tokenSecret十分重要,切记妥善保存(不要直接使用下面示例中的passwordSecret与tokenSecret)。修改passwordSecret会导致老用户使用密码无法登录,修改tokenSecret会导致所有已经下发的token失效。如果重新导入uni-id切勿直接覆盖config.json相关配置

// 如果拷贝此内容切记去除注释
{
  "passwordSecret": [
    {
      "type": "hmac-sha256",
      "version": 1
    }
  ], // 数据库中password字段是加密存储的,这里的passwordSecret即为加密密码所用的加密算法,详见[密码安全]
  "passwordStrength": "medium", // 密码强度,新增于 uni-id-pages 1.0.8版本,见下方说明
  "tokenSecret": "", // 生成token所用的密钥,注意修改为自己的,使用一个较长的字符串即可
  "requestAuthSecret": "", // URL化请求鉴权签名密钥
  "tokenExpiresIn": 7200, // 全平台token过期时间,未指定过期时间的平台会使用此值
  "tokenExpiresThreshold": 3600, // 新增于uni-id 1.1.7版本,checkToken时如果token有效期小于此值且在有效期内则自动获取新token,请注意将新token返回给前端保存(云对象会自动保存符合uniCloud响应体规范的响应内的新token),如果不配置此参数则不开启自动获取新token功能
  "maxTokenLength": 10, // 数据库用户记录token数组的最大长度,默认为10。新增于uni-id-common 1.0.16
  "passwordErrorLimit": 6, // 密码错误最大重试次数
  "passwordErrorRetryTime": 3600, // 密码错误重试次数超限之后的冻结时间
  "autoSetInviteCode": false, // 是否在用户注册时自动设置邀请码,默认不自动设置
  "forceInviteCode": false, // 是否强制用户注册时必填邀请码,默认为false
  "idCardCertifyLimit": 1, // 实名认证相关; 限制每个身份证可以绑定几个账号
  "realNameCertifyLimit": 5, // 实名认证相关; 限制用户每日认证次数,防止接口被刷
  "sensitiveInfoEncryptSecret": "", // 敏感信息加密密钥(长度为32位的字符串),如使用实名认证功能需配置此密钥
  "frvNeedAlivePhoto": false, // 实名认证相关;是否获取认证照片
  "userRegisterDefaultRole": [], // 用户注册时的默认角色
  "app": { // 如果你使用旧版本uni-id公共模块而不是uni-id-common这里可能配置的是app-plus,务必注意调整为app
    "tokenExpiresIn": 2592000,
    "tokenExpiresThreshold": 864000,
    "oauth": {
      // App微信登录所用到的appid、appsecret需要在微信开放平台获取,注意:不是公众平台而是开放平台
      "weixin": {
        "appid": "",
  
### UniApp 中实现与数据库连接以完成增删改查操作 #### 1. 使用 SQLite 和 UniCloud 实现本地和云端的增删改查功能 对于在 **UniApp** 应用程序中集成数据库的操作,可以通过两种主要途径来实现:一种是利用内置支持的轻量级关系型数据库 **SQLite** 完成本地存储;另一种则是借助于 **UniCloud** 提供的服务端能力来进行远程服务器上的数据管理。 当采用 **SQLite** 方案时,开发者能够快速构建具备基础 CRUD (Create, Read, Update, Delete) 功能的应用模块[^1]。而通过引入 **UniCloud** 的云函数特性,则允许更加灵活高效地对接各类外部服务,包括但不限于 MySQL、MongoDB 等多种类型的数据库系统[^4]。 #### 2. 配置应用环境准备阶段 为了使项目顺利运行,在正式编码之前需先做好必要的准备工作: - 如果计划使用 **SQLite** ,则无需额外安装驱动包,因为该引擎已被打包进 Android/iOS 平台; - 对于打算接入其他种类的关系型或非关系型数据库而言,则可能涉及到特定客户端库的选择以及相应依赖项的添加工作; - 不论哪种情况都建议提前规划好 API 接口的设计思路,并确保前后端交互协议的一致性。 #### 3. 编写业务逻辑代码片段展示 下面给出一段简单的 JavaScript 函数作为例子说明如何执行更新记录的动作: ```javascript // 更新单条记录的方法定义 export function updateUser(userId, updatedData){ const db = uni.getDatabase(); // 获取当前实例下的默认数据库对象 try { await db.collection('users').doc(userId).update({ data:updatedData, success(res){ console.log(`成功修改了 ${res.stats.updated} 条文档`); }, fail(err){ throw new Error(`发生错误:${JSON.stringify(err)}`); } }); } catch(error){ console.error("Error updating document:", error); } } ``` 此段脚本展示了怎样运用官方提供的 `uni.getDatabase()` 方法获取到一个可操作的数据集句柄之后再调用其链式方法 `.collection().doc().update()` 向指定位置发送变更请求。 另外值得注意的是,如果目标平台为 H5 或者桌面版的话,还需要考虑跨域资源共享(CORS)策略的影响因素,适当调整 Webpack 构建工具的相关设置以适应实际需求场景。 #### 4. 创建控制器类处理HTTP请求 针对较为复杂的业务流程设计模式下推荐建立专门用于接收来自前端页面传入参数并转发给后台微服务体系做进一步加工计算的中间层组件——即所谓的 "Controller" 。此类通常会继承自框架自带的基础父类从而获得诸如路由匹配解析等功能的支持[^3]。 ```typescript import { Controller, Get, Post, Body, Param } from '@nestjs/common'; import { UsersService } from './users.service'; @Controller('api/v1/users') export class UsersController { constructor(private readonly userService: UsersService){} @Post() async create(@Body() createUserDto: CreateUserDto): Promise<User> { return this.userService.create(createUserDto); } @Get(':id') findOne(@Param('id') id: string): Promise<User | undefined>{ return this.userService.findOne(id); } ... } ``` 上述 TypeScript 文件中的 `UsersController` 类负责监听 `/api/v1/users/:id` 路径下的 GET/POST 请求事件并将它们分发至对应的处理器内部去响应具体的动作指令。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端 贾公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值