Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
linghubobo
unidocs-zh
提交
59554fbd
U
unidocs-zh
项目概览
linghubobo
/
unidocs-zh
与 Fork 源项目一致
Fork自
DCloud / unidocs-zh
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
59554fbd
编写于
10月 13, 2021
作者:
雪洛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: uni-id
上级
202235d6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
123 addition
and
94 deletion
+123
-94
docs/uniCloud/uni-id.md
docs/uniCloud/uni-id.md
+123
-94
未找到文件。
docs/uniCloud/uni-id.md
浏览文件 @
59554fbd
...
...
@@ -141,78 +141,78 @@ exports.main = async (event, context) => {
```
json
//
如果拷贝此内容切记去除注释
{
"passwordSecret"
:
"passwordSecret-demo"
,
//
数据库中password字段是加密存储的,这里的passwordSecret即为加密密码所用的密钥,注意修改为自己的密钥,使用一个较长的字符串即可
"tokenSecret"
:
"tokenSecret-demo"
,
//
生成token所用的密钥,注意修改为自己的,使用一个较长的字符串即可
"tokenExpiresIn"
:
7200
,
//
全平台token过期时间,未指定过期时间的平台会使用此值
"tokenExpiresThreshold"
:
600
,
//
新增于uni-id
1.1
.
7
版本,checkToken时如果token有效期小于此值
则自动获取新token,请注意将新token返回给前端保存,如果不配置此参数则不开启自动获取新token功能
"bindTokenToDevice"
:
false
,
//
是否将token和设备绑定,设置为
true
会进行ua校验,uni-id
3.0
.
12
前默认为
true
,
3.0
.
12
及以后版本默认调整为
false
"passwordErrorLimit"
:
6
,
//
密码错误最大重试次数
"passwordErrorRetryTime"
:
3600
,
//
密码错误重试次数超限之后的冻结时间
"autoSetInviteCode"
:
false
,
//
是否在用户注册时自动设置邀请码,默认不自动设置
"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=cache
permissionin
token
"app-plus"
:
{
"tokenExpiresIn"
:
2592000
,
"oauth"
:
{
//
App微信登录所用到的appid、appsecret需要在微信开放平台获取,注意:不是公众平台而是开放平台
"weixin"
:
{
"appid"
:
"weixin appid"
,
"appsecret"
:
"weixin appsecret"
},
//
App
QQ登录所用到的appid、appsecret需要在腾讯开放平台获取,注意:不是公众平台而是开放平台
"passwordSecret"
:
"passwordSecret-demo"
,
//
数据库中password字段是加密存储的,这里的passwordSecret即为加密密码所用的密钥,注意修改为自己的密钥,使用一个较长的字符串即可
"tokenSecret"
:
"tokenSecret-demo"
,
//
生成token所用的密钥,注意修改为自己的,使用一个较长的字符串即可
"tokenExpiresIn"
:
7200
,
//
全平台token过期时间,未指定过期时间的平台会使用此值
"tokenExpiresThreshold"
:
600
,
//
新增于uni-id
1.1
.
7
版本,checkToken时如果token有效期小于此值且在有效期内
则自动获取新token,请注意将新token返回给前端保存,如果不配置此参数则不开启自动获取新token功能
"bindTokenToDevice"
:
false
,
//
是否将token和设备绑定,设置为
true
会进行ua校验,uni-id
3.0
.
12
前默认为
true
,
3.0
.
12
及以后版本默认调整为
false
"passwordErrorLimit"
:
6
,
//
密码错误最大重试次数
"passwordErrorRetryTime"
:
3600
,
//
密码错误重试次数超限之后的冻结时间
"autoSetInviteCode"
:
false
,
//
是否在用户注册时自动设置邀请码,默认不自动设置
"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=cache
-permission-in-
token
"app-plus"
:
{
"tokenExpiresIn"
:
2592000
,
"oauth"
:
{
//
App微信登录所用到的appid、appsecret需要在微信开放平台获取,注意:不是公众平台而是开放平台
"weixin"
:
{
"appid"
:
"weixin appid"
,
"appsecret"
:
"weixin appsecret"
},
//
App
QQ登录所用到的appid、appsecret需要在腾讯开放平台获取,注意:不是公众平台而是开放平台
"qq"
:
{
"appid"
:
"qq appid"
,
"appsecret"
:
"qq appsecret"
},
"apple"
:
{
//
使用苹果登录时需要
"bundleId"
:
"your bundleId"
}
}
},
"mp-weixin"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
微信小程序登录所用的appid、appsecret需要在对应的小程序管理控制台获取
"weixin"
:
{
"appid"
:
"weixin appid"
,
"appsecret"
:
"weixin appsecret"
}
}
},
"mp-qq"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
QQ小程序登录所用的appid、appsecret需要在对应的小程序管理控制台获取
"qq"
:
{
"appid"
:
"qq appid"
,
"appsecret"
:
"qq appsecret"
}
}
},
"mp-alipay"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
支付宝小程序登录用到的appid、privateKey请参考支付宝小程序的文档进行设置或者获取,https://opendocs.alipay.com/open/
291
/
105971
#LDsXr
"alipay"
:
{
"appid"
:
"alipay appid"
,
"privateKey"
:
"alipay privateKey"
,
//
私钥
"keyType"
:
"PKCS8"
//
私钥类型,如果私钥类型不是PKCS
8
,需要填写此字段,否则会出现“error:
0
D
0680
A
8
:asn
1
encoding
routines:ASN
1
_CHECK_TLEN:wrong
tag”错误
}
}
},
"service"
:
{
"sms"
:
{
"name"
:
"your app name"
,
//
应用名称,对应短信模版的name
"codeExpiresIn"
:
180
,
//
验证码过期时间,单位为秒,注意一定要是
60
的整数倍
"smsKey"
:
"your sms key"
,
//
短信密钥key,开通短信服务处可以看到
"smsSecret"
:
"your sms secret"
//
短信密钥secret,开通短信服务处可以看到
},
"univerify"
:
{
"appid"
:
"qq appid"
,
"appsecret"
:
"qq appsecret"
},
"apple"
:
{
//
使用苹果登录时需要
"bundleId"
:
"your bundleId"
}
}
},
"mp-weixin"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
微信小程序登录所用的appid、appsecret需要在对应的小程序管理控制台获取
"weixin"
:
{
"appid"
:
"weixin appid"
,
"appsecret"
:
"weixin appsecret"
}
}
},
"mp-qq"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
QQ小程序登录所用的appid、appsecret需要在对应的小程序管理控制台获取
"qq"
:
{
"appid"
:
"qq appid"
,
"appsecret"
:
"qq appsecret"
}
}
},
"mp-alipay"
:
{
"tokenExpiresIn"
:
259200
,
"oauth"
:
{
//
支付宝小程序登录用到的appid、privateKey请参考支付宝小程序的文档进行设置或者获取,https://opendocs.alipay.com/open/
291
/
105971
#LDsXr
"alipay"
:
{
"appid"
:
"alipay appid"
,
"privateKey"
:
"alipay privateKey"
,
//
私钥
"keyType"
:
"PKCS8"
//
私钥类型,如果私钥类型不是PKCS
8
,需要填写此字段,否则会出现“error:
0
D
0680
A
8
:asn
1
encoding
routines:ASN
1
_CHECK_TLEN:wrong
tag”错误
}
}
},
"service"
:
{
"sms"
:
{
"name"
:
"your app name"
,
//
应用名称,对应短信模版的name
"codeExpiresIn"
:
180
,
//
验证码过期时间,单位为秒,注意一定要是
60
的整数倍
"smsKey"
:
"your sms key"
,
//
短信密钥key,开通短信服务处可以看到
"smsSecret"
:
"your sms secret"
//
短信密钥secret,开通短信服务处可以看到
},
"univerify"
:
{
"appid"
:
"your appid"
,
//
当前应用的appid,使用云函数URL化,此项必须配置
"apiKey"
:
"your apiKey"
,
//
apiKey
和
apiSecret
在开发者中心获取,开发者中心:https://dev.dcloud.net.cn/uniLogin/index?type=
0
,文档:https://ask.dcloud.net.cn/article/
37965
"apiSecret"
:
"your apiSecret"
}
}
"apiKey"
:
"your apiKey"
,
//
apiKey
和
apiSecret
在开发者中心获取,开发者中心:https://dev.dcloud.net.cn/uniLogin/index?type=
0
,文档:https://ask.dcloud.net.cn/article/
37965
"apiSecret"
:
"your apiSecret"
}
}
}
```
...
...
@@ -224,6 +224,15 @@ tokenExpiresThreshold用于指定token还有多长时间过期时自动刷新tok
在token还有5分钟过期时调用checkToken接口会返回新的token和新的token的过期时间(新token有效时间也是2小时),需要前端主动保存此新token。
## Token@token
用户注册/登录成功之后均会返回token及其过期时间,token是一个
[
json web token
](
https://jwt.io/
)
字符串。开发者应在用户登录/注册成功后持久化保存token及其过期时间。同样的在用户登出之后应删除保存的token及其过期时间。
参考:
-
[
保存token及其过期时间
](
uniCloud/uni-id?id=save-token
)
-
[
删除token及其过期时间
](
uniCloud/uni-id?id=remove-token
)
# 用户角色权限@rbac
为什么需要角色权限管理?
...
...
@@ -317,10 +326,11 @@ RBAC:Role-Based Access Control,基于角色的访问控制。
如下是角色在clientDB中的配置示例:
```
js
// db-permission/uni-id-users.js
// uni-id-users.schema.json
{
"
update
"
:
"
doc._id == auth.uid || 'USER_ADMIN' in auth.role
"
//用户自己或人事管理员可执行用户表的.update操作
"
permission
"
:
{
"
update
"
:
"
doc._id == auth.uid || 'USER_ADMIN' in auth.role
"
//用户自己或人事管理员可执行用户表的.update操作
}
}
```
...
...
@@ -364,10 +374,11 @@ RBAC:Role-Based Access Control,基于角色的访问控制。
如下是权限在clientDB中的配置示例:
```
js
// db-permission/uni-id-users.js
// uni-id-users.schema.json
{
"
update
"
:
"
doc._id == auth.uid || 'USER_EDIT' in auth.permission
"
//用户自己或有`USER_EDIT`权限的用户,可执行用户表的.update操作
"
permission
"
:
{
"
update
"
:
"
doc._id == auth.uid || 'USER_EDIT' in auth.permission
"
//用户自己或有`USER_EDIT`权限的用户,可执行用户表的.update操作
}
}
```
...
...
@@ -377,6 +388,10 @@ RBAC:Role-Based Access Control,基于角色的访问控制。
uni-id针对角色权限模块封装了丰富的API,比如:获取用户角色、获取某角色下的所有权限等,详情参考:
[
角色权限API
](
uniCloud/uni-id.md?id=rbac-api
)
。
> 自`uni-id 3.0.0`起,支持在token内缓存用户的角色权限,默认开启此功能,各登录接口的needPermission参数不再生效。如需关闭请在config内配置`"removePermissionAndRoleFromToken": true`。详情参考:[缓存角色权限](uniCloud/uni-id?id=cache-permission-in-token)。
如果不在token内缓存角色权限,可以使用以下方式,在checkToken时返回数据库内对应用户的角色权限信息。
uni-id登录注册接口可接收
`needPermission`
参数,若
`needPermission`
配置为true时,后续会在
`checkToken`
接口返回用户权限列表(permission)。如下是通过token判断权限的简单示例:
```
js
...
...
@@ -441,7 +456,7 @@ exports.main = async function(event,context) {
**注意**
-
注册成功之后会返回token
,在获取token之后应进行持久化存储,键值为:
`uni_id_token、uni_id_token_expired`
,例:
`uni.setStorageSync('uni_id_token',res.result.token)`
-
注册成功之后会返回token
、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
**参数说明**
...
...
@@ -541,15 +556,15 @@ uniCloud.callFunction({
### 用户登录 @login
登录就是通过查询数据库验证,客户端传递的“用户名”和“密码”是否匹配并返回token、uid等响应参数(详见下文“响应参数”表)的过程。
如果你允许用户同时使用多种方式登录,需要注意:必须限制用户注册用户名不为邮箱格式且不为手机号格式,uni-id内部并未做出此类限制。否则用户可以使用他人的手机号码作为用户名注册账号,这就成了一个漏洞。具体做法可以参考
[
云端一体应用快速开发模版"uniStarter"
](
https://ext.dcloud.net.cn/plugin?id=5057
)
用法:
`uniID.login(Object LoginParams)`
**注意**
-
登录成功之后会返回token
,在获取token之后应进行持久化存储,键值为:
`uni_id_token、uni_id_token_expired`
,例:
`uni.setStorageSync('uni_id_token',res.result.token)`
-
登录成功之后会返回token
、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
-
登录时请注意自行验证数据有效性
**参数说明**
...
...
@@ -628,7 +643,7 @@ exports.main = async function(event,context) {
-
如果在token内缓存角色权限,建议将此
`needUserInfo`
参数配置为
`false`
-
角色内包含admin时返回的permission是一个空数组,因此判断一个用户是否有权限时应注意admin角色额外进行判断
请务必阅读一下此文档:
[
关于缓存角色权限的说明
](
uniCloud/uni-id.md?id=cache
permissionin
token
)
请务必阅读一下此文档:
[
关于缓存角色权限的说明
](
uniCloud/uni-id.md?id=cache
-permission-in-
token
)
**响应参数**
...
...
@@ -701,19 +716,15 @@ uniCloud.callFunction({
```
### 登出
### 登出@logout
登出就是一个验证客户端uniCloud.callFunction自带的uniIdToken通过token校验并获取uid,将对应uid的用户的token清除的过程(uniID登出api内部会自动完成,你传入uniIdToken即可)。
用法:
`uniID.logout(String token);`
**注意**
-
登出成功之后应删除持久化存储的token,键值为:
`uni_id_token`
,
`uni.removeStorageSync('uni_id_token')`
```
js
uni
.
removeStorageSync
(
'
uni_id_token
'
)
uni
.
removeStorageSync
(
'
uni_id_token_expired
'
)
```
-
登出成功之后应删除持久化存储的token,参考:
[
客户端删除token及其有效期
](
uniCloud/uni-id?id=remove-token
)
**参数说明**
...
...
@@ -1096,6 +1107,24 @@ exports.main = async function(event,context) {
}
```
### 客户端保存token及其有效期@save-token
在用户登录/注册成功后应在storage内保存用户的token及其过期时间,示例代码如下:
```
js
uni
.
setStorageSync
(
'
uni_id_token
'
,
token
)
uni
.
setStorageSync
(
'
uni_id_token_expired
'
,
tokenExpired
)
```
### 客户端删除token及其有效期@remove-token
在用户登出成功之后应删除持久化存储的token及其过期时间,示例代码如下:
```
js
uni
.
removeStorageSync
(
'
uni_id_token
'
)
uni
.
removeStorageSync
(
'
uni_id_token_expired
'
)
```
## 手机号码@mobile
### 发送短信验证码@sendsmscode
...
...
@@ -1575,7 +1604,7 @@ exports.main = async function(event,context) {
-
需要在config.json内使用微信登录的平台下配置appid和appsecret
-
uniId会自动判断客户端平台
-
登录成功之后
应持久化存储token、token过期时间,键值为:
`uni_id_token、uni_id_token_expired`
,例:
`uni.setStorageSync('uni_id_token', res.result.token)`
-
登录成功之后
会返回token、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
-
App端获取code不可直接调用
`uni.login`
,详细用法可以看下面示例
**APP微信登录详细配置流程**
...
...
@@ -1854,7 +1883,7 @@ exports.main = async function(event,context) {
-
需要在config.json内使用QQ登录的平台下配置appid和appsecret
-
uniId会自动判断客户端平台
-
登录成功之后
应持久化存储token、token过期时间,键值为:
`uni_id_token、uni_id_token_expired`
,例:
`uni.setStorageSync('uni_id_token', res.result.token)`
-
登录成功之后
会返回token、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
**APP QQ登录详细配置流程**
...
...
@@ -2027,7 +2056,7 @@ export default {
**注意**
-
需要在config.json内支付宝平台下配置appid和privateKey(应用私钥)
-
登录成功之后
应持久化存储token,键值为:
`uni_id_token、uni_id_token_expired`
,例:
`uni.setStorageSync('uni_id_token', res.result.token)`
-
登录成功之后
会返回token、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
**LoginByAlipayParams参数说明**
...
...
@@ -2176,7 +2205,7 @@ exports.main = async function(event,context) {
**注意**
-
需要在config.json内的 app-plus > oauth > apple 下配置 bundleId
-
登录成功之后
应持久化存储token,键值为:uni_id_token,
`uni.setStorageSync('uni_id_token', res.result.token)`
-
登录成功之后
会返回token、tokenExpired,在获取token之后应进行持久化存储,详情参考:
[
保存token及其有效期
](
uniCloud/uni-id.md?id=save-token
)
**LoginByAppleParams参数说明**
...
...
@@ -3210,7 +3239,7 @@ uni-id-users表内存储的password字段为使用hmac-sha1生成的hash值,
由于是不可逆加密,理论上passwordSecret泄露不会造成用户的真实密码被泄露,自定义passwordSecret只是进一步加强安全性。
## 缓存角色权限@cache
permissionin
token
## 缓存角色权限@cache
-permission-in-
token
自
`uni-id 3.0.0`
起,支持在token内缓存用户的角色权限,默认开启此功能,各登录接口的needPermission参数不再生效。如需关闭请在config内配置
`"removePermissionAndRoleFromToken": true`
。
...
...
@@ -3388,7 +3417,7 @@ exports.main = async function(event, context) {
## 自2.x.x版本升级到3.x.x@m2to3
3.
0.0版本起uni-id默认将缓存用户角色权限到token内,关于缓存角色权限的说明请参考:
[
缓存角色权限
](
uniCloud/uni-id?id=cache
permissionin
token
)
。从2.x.x版本升级到3.x.x版本需要根据自己需求分别处理。
3.
0.0版本起uni-id默认将缓存用户角色权限到token内,关于缓存角色权限的说明请参考:
[
缓存角色权限
](
uniCloud/uni-id?id=cache
-permission-in-
token
)
。从2.x.x版本升级到3.x.x版本需要根据自己需求分别处理。
-
如果不希望缓存角色权限到token内,需要在config.json内配置
`"removePermissionAndRoleFromToken": true`
。
-
如果希望升级为缓存角色权限到token内的方案,可以按照以下步骤迁移
...
...
@@ -3518,7 +3547,7 @@ exports.main = async function() {
# FAQ
-
token数组为什么越来越长
+
每次登录成功
都会新增一个token,并且检查所有token的有效期删除过期token。正常情况下客户端应该判断持久化存储的token是否还在有效期内,如果还有效就直接进入应用,不再执行登录。这样相当于用户的每个设备上都存在一个有效期内的token,云端也是
。
+
每次登录成功
/刷新token都会新增一个token,并且检查所有token的有效期删除过期token。正常情况下客户端应该判断持久化存储的token是否还在有效期内,如果还有效就直接进入应用,不再执行登录。这样相当于用户的每个设备上都存在一个有效期内的token,云端会保留所有仍在有效期内的token(部分过期token需要等待用户重新获取token之后才会删除)
。
-
复制token到其他环境校验不通过
+
uni-id内会校验客户端ua,如果是在本地调试可以在云函数内修改
`context.CLIENTUA`
为生成token的设备ua,切记上线删除此逻辑。如果不需要设备和token绑定,可以在config内配置
`bindTokenToDevice: false`
来关闭绑定,
`uni-id 3.0.12`
及以上版本bindTokenToDevice默认值调整为了false
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录