目录
简介
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需要的密钥tokenExpiresIn
token有效期,以秒为单位passwordErrorLimit
密码错误重试次数,分ip记录密码错误次数,达到重试次数之后等待passwordErrorRetryTime
时间之后才可以重试passwordErrorRetryTime
单位为秒- 如果使用
sendSmsCode
接口发送短信需要前往uniCloud控制台开通并充值,配置config.json
的service
字段,字段说明见下方示例 - 另外可以按照客户端平台进行不同的配置,参考下面示例
下面的配置文件中所有时间的单位都是秒
!!!重要!!! 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": "",