提交 2081bea6 编写于 作者: 雪洛's avatar 雪洛

docs: uni-id

上级 d6b49673
......@@ -137,7 +137,8 @@ exports.main = async (event, context) => {
"passwordErrorLimit": 6, // 密码错误最大重试次数
"passwordErrorRetryTime": 3600, // 密码错误重试次数超限之后的冻结时间
"autoSetInviteCode": false, // 是否在用户注册时自动设置邀请码,默认不自动设置
"forceInviteCode": false, // 是否强制用户注册时必填邀请码,默认为false(需要注意的是目前只有短信验证码注册才可以填写邀请码),设置为true时需要在loginBySms时指定type为register来使用注册,登录时也要传入type为login
"forceInviteCode": false, // 是否强制用户注册时必填邀请码,默认为false(需要注意的是目前只有短信验证码注册才可以填写邀请码),设置为true时需要在loginBySms时指定type为register来使用注册,登录时也要传入type为login
"removePermissionAndRoleFromToken": false, // 新增于uni-id 3.0.0版本,如果配置为false则自动缓存用户的角色、权限到token中,默认值为false。详细说明见https://uniapp.dcloud.io/uniCloud/uni-id?id=cachepermissionintoken
"app-plus": {
"tokenExpiresIn": 2592000,
"oauth": {
......@@ -149,6 +150,7 @@ exports.main = async (event, context) => {
}
},
"mp-weixin": {
"tokenExpiresIn": 259200,
"oauth": {
// 微信小程序登录所用的appid、appsecret需要在对应的小程序管理控制台获取
"weixin": {
......@@ -158,6 +160,7 @@ exports.main = async (event, context) => {
}
},
"mp-alipay": {
"tokenExpiresIn": 259200,
"oauth": {
// 支付宝小程序登录用到的appid、privateKey请参考支付宝小程序的文档进行设置或者获取,https://opendocs.alipay.com/open/291/105971#LDsXr
"alipay": {
......@@ -339,8 +342,7 @@ function hasPermission(token, permission) {
const checkTokenRes = await uniID.checkToken(token)
return checkTokenRes.permission.includes(permission)
}
```
```
# uni-id的API列表@api
......@@ -362,7 +364,7 @@ function hasPermission(token, permission) {
| --- | --- | --- | --- |
| username | String | 是 |用户名,唯一 |
| password | String | 是 |密码 |
| needPermission| Boolean | 否 |设置为true时会在checkToken时返回用户权限(permission),建议在管理控制台中使用 |
| needPermission| Boolean | 否 |设置为true时会在checkToken时返回用户权限(permission)`uni-id 3.0.0`起,如果配置`"removePermissionAndRoleFromToken": false`此选项不再生效 |
| myInviteCode | String | 否 |自行设置用户的邀请码 |
username可以是字符串、可以是email、可以是手机号,本插件不约束,开发者可以自己定。
......@@ -458,7 +460,7 @@ uniCloud.callFunction({
| --- | --- | --- | --- |
| username | String| 是 |用户名 |
| password | String| 是 |密码 |
| needPermission| Boolean | 否 |设置为true时会在checkToken时返回用户权限(permission),建议在管理控制台中使用 |
| needPermission| Boolean | 否 |设置为true时会在checkToken时返回用户权限(permission)`uni-id 3.0.0`起,如果配置`"removePermissionAndRoleFromToken": false`此选项不再生效 |
| queryField | Array| 否 |指定从哪些字段中比对username(传入参数均为username),不填默认与数据库内的username字段对比, 可取值'username'、'email'、'mobile'|
**响应参数**
......@@ -531,34 +533,56 @@ exports.main = async function(event,context) {
```
### token校验
### token校验@checkToken
用法:`uniID.checkToken(String token)`
用法:`uniID.checkToken(String token, Object checkTokenOptions)`
**参数说明**
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| token | String| 是 |客户端callFunction带上的token|
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| token | String| 是 |客户端callFunction带上的token|
| checkTokenOptions | Object| 是 |checkToken选项`uni-id 3.0.0`版起支持 |
**checkTokenOptions说明**
| 字段 | 类型 | 必填| 默认值|说明 |
| --- | --- | --- |--- | --- |
| needPermission| Boolean | 否 |- |是否需要返回角色权限|
**说明**
- needPermission参数可以覆盖旧版token(config内配置`"removePermissionAndRoleFromToken": true`时生成的token)内的needPermission配置。
- 角色内包含admin时返回的permission是一个空数组,因此判断一个用户是否有权限时应注意admin角色额外进行判断
**响应参数**
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| code | Number |错误码,0表示成功 |
| message | String |详细信息 |
| message | String |详细信息 |
| uid | String |用户Id,校验成功之后会返回 |
| token | String |新增于uni-id 1.1.7版本,用户token快要过期时,新生成的token,只有在config内配置了`tokenExpiresThreshold`的值时才会有此行为|
| tokenExpired| TimeStamp |新增于uni-id 1.1.7版本,新token的过期时间 |
| role | Array |新增于uni-id 1.1.9版本,用户角色列表 |
| permission | Array |新增于uni-id 1.1.9版本,用户权限列表,只有登录操作时传入needPermission才会返回,否则为空数组 |
| userInfo | Object |用户信息,uid对应的uni-id-users全部字段 |
| role | Array |新增于uni-id 1.1.9版本,用户角色列表。`uni-id 3.0.0`以上版本传入`needPermission:true`时返回此字段 |
| permission | Array |新增于uni-id 1.1.9版本,用户权限列表,只有登录操作时传入needPermission才会返回,否则为空数组。`uni-id 3.0.0`以上版本传入`needPermission:true`时返回此字段 |
| userInfo | Object |用户信息,uid对应的uni-id-users全部字段。`uni-id 3.0.0`以上版本不再返回userInfo字段 |
uni-id使用jwt生成token,jwt所生成的token包含三部分,其中存储的信息为明文信息,uni-id只根据tokenSecret来校验客户端token是否合法。
`uni-id 3.0.0`之前的版本,checkToken必然会查询数据库进行token合法性校验。
`uni-id 3.0.0`起,默认情况下不再查库校验token,角色权限将被缓存在token中,此举能减少或消除checkToken的查库次数(有效节省费用、减少响应时间)。
如需关闭此行为需在config内配置`removePermissionAndRoleFromToken:true`
更多关于`removePermissionAndRoleFromToken`的说明见:[缓存角色权限](https://uniapp.dcloud.io/uniCloud/uni-id?id=cachepermissionintoken)
**注意:**
- 客户端会自动查找storage内的token在callFunction时插入
- 2.9.5+ 客户端允许开发者自行传入uniIdToken,此时不再从storage获取token
- 2.8.0版本起token存储在storage内推荐使用使用蛇形`uni_id_token`,会在一段时间内兼容驼峰形式`uniIdToken`
- HBuilderX 2.9.5+ 客户端允许开发者自行传入uniIdToken,此时不再从storage获取token
- HBuilderX 2.8.0版本起token存储在storage内推荐使用使用蛇形`uni_id_token`,会在一段时间内兼容驼峰形式`uniIdToken`
**示例代码**
......@@ -860,13 +884,47 @@ exports.main = async function(event,context) {
})
return res
}
```
```
### 根据token获取用户信息
`uni-id 3.0.0`起支持
用法:`uniID.getUserInfoByToken(String token);`
**参数说明**
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| token | String| 是 |用户的token |
**响应参数**
| 字段 | 类型 | 必填| 说明 |
| --- | --- | --- | --- |
| code | Number| 是 |错误码,0表示成功|
| message | String| 是 |详细信息 |
| userInfo| Object| 是 |获取的用户信息 |
```js
// 云函数代码
const uniID = require('uni-id')
exports.main = async function(event,context) {
const res = await uniID.getUserInfoByToken(event.uniIdToken)
return res
}
```
**注意**
- 此接口仅校验token是否合法,从token中获取用户信息。不查库校验token,也不会查库获取用户信息。适用于不想使用checkToken获取用户信息的场景(checkToken内包含其他逻辑,比如自动刷新token等)
### 自行初始化uni-id@init
用法:`uniID.init(Object InitParams);`
此接口适用于不希望使用config.json初始化而是希望通过js的方式传入配置的情况
此接口仅适用于不希望使用config.json初始化而是希望通过js的方式传入配置的情况,多数情况下不推荐使用。**如果你要使用clientDB,且必须要用这种方式初始化uni-id,必须在uni-id的config.json内也写上同样的配置。**
**config参数说明**
......@@ -2323,6 +2381,7 @@ exports.main = async function(event,context) {
|更新用户信息 |801 |01 |(80101)参数错误 |
|设置头像 |802 |- |- |
|获取用户信息 |803 |01 |(80301)未查询到用户信息 |
|传入token获取用户信息 |808 |01 |(80801)未查询到用户信息 |
|设置用户自己的邀请码 |804 |01 |(80401)邀请码设置失败,验证码重复或自动设置重试多次依然重复 |
| | |02 |(80402)邀请码重试多次依然重复 |
|填写邀请人邀请码 |805 |01 |(80501)邀请码无效(邀请码存在且唯一时才算有效) |
......@@ -2334,7 +2393,7 @@ exports.main = async function(event,context) {
| | |02 |(80702)调用获取openid接口失败 |
|公用码 |900 |01 |(90001)数据库读写异常 |
**另外还有一些字符串类型的扩展错误码在各自接口的文档中展示,请不要直接使用`code>0`这种方式来判断是否有错误**
**另外还有一些字符串类型的扩展错误码在各自接口的文档中展示,请不要直接使用`code>0`这种方式来判断是否有错误,建议使用`if(code){}`来判断是否有错误**
# 其他功能
......@@ -2425,6 +2484,23 @@ uni-id-users表内存储的password字段为使用hmac-sha1生成的hash值,
用户对应的数据库记录内没有密钥版本的话会使用最低版本密钥进行密码校验,校验通过后为用户更新为最新版密钥对应的password并记录版本号。
由于是不可逆加密,理论上passwordSecret泄露不会造成用户的真实密码被泄露,自定义passwordSecret只是进一步加强安全性。
## 缓存角色权限@cachepermissionintoken
`uni-id 3.0.0`起,支持在token内缓存用户的角色权限,默认开启此功能,各登录接口的needPermission参数不再生效。如需关闭请在config内配置`"removePermissionAndRoleFromToken": true`
为什么要缓存角色权限?要知道云数据库是按照读写次数来收取费用的,并且读写数据库会拖慢接口响应速度。未配置`"removePermissionAndRoleFromToken": true`的情况下,可以在调用checkToken接口时不查询数据库获取用户角色权限。
详细checkToken流程如下:
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/ed45d350-5a4d-11eb-b997-9918a5dda011.jpg)
可以看出,旧版token(removePermissionAndRoleFromToken为true时生成的)在checkToken时如需返回权限需要进行两次数据库查询。新版token不需要查库即可返回权限信息。
**注意**
- 由于角色权限缓存在token内,可能会存在权限已经更新但是用户token未过期之前依然是旧版角色权限的情况。可以调短一些token过期时间来减少这种情况的影响。
- admin角色token内不包含permission,如需自行判断用户是否有某个权限,要注意admin角色需要额外判断一下
# FAQ
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册