Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
unidocs-zh
提交
1c976d71
unidocs-zh
项目概览
DCloud
/
unidocs-zh
通知
3172
Star
105
Fork
804
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
93
列表
看板
标记
里程碑
合并请求
67
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
unidocs-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
93
Issue
93
列表
看板
标记
里程碑
合并请求
67
合并请求
67
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1c976d71
编写于
2月 22, 2023
作者:
C
chenruilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
docs: update uni-id frv doc
上级
de393024
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
494 addition
and
19 deletion
+494
-19
docs/uniCloud/frv/dev.md
docs/uniCloud/frv/dev.md
+313
-2
docs/uniCloud/uni-id-pages.md
docs/uniCloud/uni-id-pages.md
+98
-4
docs/uniCloud/uni-id-summary.md
docs/uniCloud/uni-id-summary.md
+83
-13
未找到文件。
docs/uniCloud/frv/dev.md
浏览文件 @
1c976d71
...
...
@@ -37,7 +37,7 @@ sequenceDiagram
```
-
如果您使用uni-id,那么uni-id-pages已经帮您内置好相关功能,前端页面和云端逻辑均已写好,安全、无需开发、拿来就用。
[
详见
](
待补充
)
-
如果您使用uni-id,那么uni-id-pages已经帮您内置好相关功能,前端页面和云端逻辑均已写好,安全、无需开发、拿来就用。
[
详见
](
/uniCloud/uni-id-summary.md#frv
)
-
如果您的业务系统不在uniCloud上,那么需要在上述流程图中加一个原业务服务器,由云函数和原业务服务器进行token校验、传递认证结果。
### 接口防刷
...
...
@@ -368,6 +368,317 @@ module.exports = {
-
HBuilderX3.7.4+新增支持,标准基座可直接真机运行,打包或自定义基座需在“App模块配置”中勾选“FacialRecognitionVerify(实人认证)”(注意不是faceId)参考
[
详情
](
https://uniapp.dcloud.net.cn/tutorial/app-facialRecognitionVerify.html
)
-
App-Android平台要求
**Android5**
(API Leavel 21)及以上系统,App-iOS平台要求
**iOS9**
及以上系统
-
App端使用实人认证SDK,需在隐私政策的三方SDK中添加实人认证功能描述,参考
[
详情
](
https://ask.dcloud.net.cn/article/39484#FacialRecognitionVerify
)
### 非 uniCloud 业务使用 <Badge text="uni-frv-pages 待发布" />
如果您的业务没有部署在 uniCloud 上,可以通过 uni-frv-pages 来实现实人认证功能。
uni-frv-pages 集成了实名认证前端页面和云端云对象,适用于没有使用uniCloud或没有使用uni-id账号体系的项目。
插件下载地址:
[
https://ext.dcloud.net.cn/plugin?name=uni-frv-pages
](
https://ext.dcloud.net.cn/plugin?name=uni-frv-pages
)
#### 业务流程
```
mermaid
sequenceDiagram
actor client as 客户端
participant cf as 开发者云函数
participant dev as 开发者服务器
participant service as 实人认证服务
client->>+cf: 携带token请求certifyId
cf->>+dev: 请求校验用户id
Note over cf,dev: 开发者需实现用户验证接口<br />供云函数调用
dev-->>-cf: 返回用户id
cf->>+service: 请求certifyId
service-->>-cf: 返回certifyId
Note over client,cf: 云函数存储uid+certifyId+实名信息的关联关系
cf-->>-client: 返回certifyId
client->>+service: 进行实人认证
service-->-client: 返回认证结果
client->>+cf: 请求绑定实名信息
cf->>+service: 请求认证结果
service-->>-cf: 返回认证结果
cf->>+dev: 将用户实名信息、uid发送给开发者服务器
dev-->>-cf: 返回绑定成功或失败
cf-->>-client: 返回绑定成功或失败
```
#### 项目文件说明
```
text
├── uni_modules 存放[uni_module](/uni_modules)规范的插件。
│ ├── uni-frv-pages
│ │ ├── changelog.md
│ │ ├── common 页面公共逻辑
│ │ │ ├── check-id-card.js 校验身份证号合法性
│ │ │ └── common.scss
│ │ ├── components 公共组件
│ │ │ └── uni-frv-pages-realname 实名认证组件
│ │ │ ├── face-verify-icon.svg 实名认证错误提示Icon
│ │ │ └── uni-frv-pages-realname.vue
│ │ ├── package.json 包管理文件
│ │ ├── pages
│ │ │ └── common
│ │ │ └── webview 用于实现应用内浏览或打开《用户协议和隐私协议》URL链接页面
│ │ │ └── webview.vue
│ │ ├── pages_init.json 页面初始化文件
│ │ ├── readme.md
│ │ └── uniCloud
│ │ ├── cloudfunctions
│ │ │ └── uni-frv-co 实名认证云对象
│ │ │ ├── config.js 加载uni-config-center/uni-frv-co.json配置文件
│ │ │ ├── functions 云对象方法目录
│ │ │ │ ├── _after.js 云对象加载后方法
│ │ │ │ ├── _before.js 云对象执行前方法
│ │ │ │ ├── getAuthResult.js 获取实人认证结果
│ │ │ │ ├── getCertifyId.js 获取实人认证认证ID
│ │ │ │ └── index.js 导出云对象方法文件
│ │ │ ├── index.obj.js 云对象入口
│ │ │ ├── lang 国际化目录
│ │ │ │ ├── en.js
│ │ │ │ ├── index.js
│ │ │ │ └── zh-hans.js
│ │ │ ├── lib 云对象公共类库
│ │ │ │ ├── constants.js 变量定义声明文件
│ │ │ │ ├── error.js 错误码
│ │ │ │ ├── request-webhook.js 处理业务服务器回调文件
│ │ │ │ ├── sensitive-aes-cipher.js 敏感信息加解密
│ │ │ │ ├── sign.js 用于给业务服务器回调数据签名
│ │ │ │ ├── utils.js 工具类方法
│ │ │ │ └── validator.js 请求参数校验
│ │ │ └── package.json 包管理文件
│ │ └── database 数据库目录
│ │ └── opendb-frv-logs.schema.json 实人认证记录表
```
#### 配置(uni-frv-co)
实人认证配置文件路径:
`uniCloud/cloudfunctions/common/uni-config-center/uni-frv-pages/config.json`
```
json
//
如果拷贝此内容切记去除注释
{
"callback"
:
{
//
配置业务服务器回调
"userAuth"
:
""
,
//
用户校验
"verifyResult"
:
""
//
认证完成后结果回调
},
"requestTimeout"
:
5000
,
//
请求业务服务器超时时间
"realNameCertifyLimit"
:
5
,
//
限制每个用户每天实人认证次数
"sensitiveInfoEncryptSecret"
:
""
,
//
敏感信息加密密钥(长度需要大于
32
位),敏感信息如:姓名、身份证号、认证照片
"needAlivePhoto"
:
true
,
//
是否需要返回用户人脸照片
"requestAuthSecret"
:
""
//
请求业务服务器时计算签名密钥
}
```
#### 前端使用
将
`uni-frv-pages`
插件导入至项目中,由于
`uni-frv-pages`
提供的实名认证入口是组件形式,需要自行准备实名认证页面,将
`uni-frv-pages-realname`
引入至页面中。
**组件用法**
```
vue
<uni-frv-pages-realname
:agreement=
"{url: '', title: ''}"
token=
"user token"
@
result=
"resultCallback"
></uni-frv-pages-realname>
```
**组件Props**
| 属性名 | 类型 | 默认值 | 说明 |
|-----------|--------|-----|-------------------|
| agreement | Object | - | 隐私协议展示名称与地址,默认不展示 |
| token | String | - | 业务系统的用户id |
**组件Event**
| 事件名称 | 事件说明 | 返回参数 |
|--------|--------|-------------|
| result | 认证成功事件 | 见下方Result说明 |
Result说明
| 参数 | 类型 | 说明 |
|----------|--------|---------------------------------|
| status | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| idCard | string | 用户身份证号码 |
| realName | string | 用户真实姓名 |
**实名认证页面示例**
```
vue
<
template
>
<view
class=
"content"
>
<template
v-if=
"isCertified"
>
<uni-list>
<uni-list-item
class=
"item"
title=
"姓名"
:rightText=
"realName"
></uni-list-item>
<uni-list-item
class=
"item"
title=
"身份证号码"
:rightText=
"idCard"
></uni-list-item>
</uni-list>
</
template
>
<
template
v-else
>
<uni-frv-pages-realname
:agreement=
"agreement"
:token=
"token"
@
result=
"resultCallback"
></uni-frv-pages-realname>
</
template
>
</view>
</template>
<
script
>
export
default
{
data
()
{
return
{
token
:
''
,
agreement
:
{
title
:
"
实名认证协议
"
,
url
:
"
https://www.xxx.com
"
},
isCertified
:
false
,
realName
:
''
,
idCard
:
''
,
}
},
methods
:
{
resultCallback
(
result
)
{
if
(
result
.
status
===
2
)
{
this
.
isCertified
=
true
this
.
realName
=
result
.
realName
this
.
idCard
=
result
.
idCard
}
}
}
}
</
script
>
```
#### 业务回调接口规范
完成整个实名认证流程,需要业务服务器配合提供两个回调接口,用于用户校验与认证结果通知。
为保证请求在网络上传输安全,在请求回调地址时,
`uni-frv-co`
会对请求参数进行签名,开发者在服务器需要验证签名是否正确,不正确的签名可以将请求拒绝。
验证签名操作为开发者主动行为,需要开发者评估是否需要签名验证,不作为强制要求。但强烈建议验证签名以保证安全性。
**概述**
| 请求相关项 | 说明 |
|--------|---------------------------------------------------------------|
| 请求协议 | HTTP/HTTPS,为保证数据安全,建议使用 HTTPS |
| 请求方式 | POST |
| 请求类型 | application/json; charset=utf-8 |
| 校验方式 | uni-frv-co 请求到业务服务器时,开发者应从请求头中获取签名字段进行安全校验,防止数据篡改;签名见下方请求签名说明 |
| 请求超时时间 | 默认超时5秒钟,可在配置文件中配置 |
**请求签名说明**
请在
`uni-frv-co`
配置文件中配置
`requestAuthSecret`
请求鉴权密钥,确保业务服务器与配置文件中的请求鉴权密钥一致。
发起请求时,将使用请求鉴权密钥计算签名,会在 HTTP 请求头中携带以下信息:
| Header | 描述 |
|-------------------|-----------------------------------------------------------------|
| uni-frv-nonce | 随机字符串 |
| uni-frv-timestamp | 当前时间戳; 单位毫秒 |
| uni-frv-signature | 请求鉴权签名; 了解签名算法
[
详见
](
/uniCloud/uni-id-pages.md#http-reqeust-auth
)
|
**用户校验**
以下示例的请求地址均为示例,在实际使用中将更换为业务服务器的回调地址。
HTTP 示例
```
javascript
POST
/
callback
/
userAuth
HTTP
/
1.1
Host
:
xxx
.
com
uni
-
frv
-
nonce
:
x9K3829
uni
-
frv
-
timestamp
:
1676882808550
uni
-
frv
-
signature
:
1
C965267A4A02C6978949C7135215B0A75AEA22B2B84ED491E792365C8269EFA
Content
-
Type
:
application
/
json
Cache
-
Control
:
no
-
cache
{
"
token
"
:
"
test token
"
}
```
Request Body 说明
| 名称 | 类型 | 必须 | 说明 |
|-------|--------|-----|---------------|
| token | string | 是 | 业务系统中的用户token |
Response Body 说明
| 名称 | 类型 | 必须 | 说明 |
|---------|--------|-----|---------------------|
| errCode | string | 是 | 错误码;成功返回0,其他错误返回错误码 |
| errMsg | string | 否 | 错误信息;成功可以为空 |
| uid | string | 是 | 业务系统中的用户id |
**注意**
-
开发者需要严格按照 ResponseBody 格式返回。
**认证结果通知**
以下示例的请求地址均为示例,在实际使用中将更换为业务服务器的回调地址。
HTTP 示例
```
javascript
POST
/
callback
/
verifyResult
HTTP
/
1.1
Host
:
xxx
.
com
uni
-
frv
-
nonce
:
x9K3829
uni
-
frv
-
timestamp
:
1676882808550
uni
-
frv
-
signature
:
1
C965267A4A02C6978949C7135215B0A75AEA22B2B84ED491E792365C8269EFA
Content
-
Type
:
application
/
json
Cache
-
Control
:
no
-
cache
{
"
uid
"
:
"
test uid
"
,
"
realName
"
:
"
张三
"
,
"
idCard
"
:
'
10xxxxxxxxxx
'
,
"
photo
"
:
"
...
"
,
"
status
"
:
2
}
```
Request Body 说明
| 名称 | 类型 | 必须 | 说明 |
|----------|--------|-----|---------------------------------|
| uid | string | 是 | 业务系统中的用户id |
| realName | string | 是 | 真实姓名 |
| idCard | string | 是 | 身份证号码 |
| photo | string | 是 | 用户认证照片;needAlivePhoto为true时返回 |
| status | string | 是 | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
Response Body 说明
| 名称 | 类型 | 必须 | 说明 |
|----------|--------|-----|---------------------|
| errCode | string | 是 | 错误码;成功返回0,其他错误返回错误码 |
| errMsg | string | 否 | 错误信息;成功可以为空 |
| realName | string | 否 | 真实姓名 |
| idCard | string | 否 | 身份证号 |
**注意**
-
开发者需要严格按照
`ResponseBody`
格式返回。
-
如果有敏感数据脱敏需求,可以在响应中返回脱敏后的真实姓名和身份证号。
#### 回调接口签名验证
**nodejs示例**
```
javascript
function
verify
(
body
,
signature
,
timestamp
,
nonce
)
{
const
timeout
=
30
*
1000
// 请求超过30秒不能再请求,防止重放攻击
const
bodyStr
=
Object
.
keys
(
body
)
.
sort
()
.
filter
(
item
=>
typeof
body
[
item
]
!==
'
object
'
)
.
map
(
item
=>
`
${
item
}
=
${
body
[
item
]}
`
)
.
join
(
'
&
'
)
if
(
isNaN
(
Number
(
timestamp
))
||
(
Number
(
timestamp
)
+
timeout
)
<
Date
.
now
())
{
throw
{
errCode
:
"
ILLEGAL_REQUEST
"
}
}
const
reSignature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
requestAuthSecret
+
nonce
}
`
).
update
(
`
${
timestamp
}${
bodyStr
}
`
).
digest
(
'
hex
'
)
if
(
signature
!==
reSignature
.
toUpperCase
())
{
throw
{
errCode
:
"
ILLEGAL_REQUEST
"
}
}
return
true
}
```
其他语言参考
[
签名算法
](
/uniCloud/uni-id-pages.md#http-reqeust-auth
)
自行实现签名验证逻辑
docs/uniCloud/uni-id-pages.md
浏览文件 @
1c976d71
...
...
@@ -1528,6 +1528,40 @@ await uniIdCo.getInvitedUser({
-
仅在用户token即将过期时返回新newToken
#### 获取账户实名信息(脱敏)@get-realname-info <Badge text="uni-id-pages 1.1.2+" />
接口名:getRealNameInfo
**接口形式**
```
js
await
uniIdCo
.
getRealNameInfo
({
decryptData
})
```
**参数说明**
|参数名 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|decryptData |boolean |否 |是否解密数据;默认:true|
**返回值**
| 参数名 | 类型 | 说明 |
|-------------|---------------------|-----------------------------------|
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
| type | number | 用户类型:0 个人用户 1 企业用户 |
| authStatus | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| realName | string | 姓名(脱敏);用户类型为 0 时返回 |
| identity | string | 身份证号码(脱敏);用户类型为 0 时返回 |
**注意**
在uni-id-pages中默认启用敏感数据加解密,如果开发者没有使用uni-id提供的
[
敏感信息加密
](
uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
功能,请将
`decryptData`
参数改为
`false`
,返回原始信息
### 安全验证@verifier
#### 创建图形验证码@create-captcha
...
...
@@ -2008,7 +2042,7 @@ await uniIdCo.updateUserInfoByExternal({
|-- |-- |-- |-- |
|uid |string |否 |uni-id体系的用户Id;与externalUid 二选一 |
|externalUid |string |否 |自身系统的用户id;与 uid 二选一 |
| username | string |
否
| 用户名 |
| username | string |
是
| 用户名 |
| password | string | 否 | 密码 |
| nickname | string | 否 | 昵称 |
| authorizedApp | Array
<
string
>
| 否 | 允许登录的app列表 |
...
...
@@ -2025,6 +2059,67 @@ await uniIdCo.updateUserInfoByExternal({
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
### 实名认证 <Badge text="待发布" />
#### 获取认证ID@get-frv-certify-id
接口名:getFrvCertifyId
**接口形式**
```
js
await
uniIdCo
.
getFrvCertifyId
({
realName
,
idCard
,
metaInfo
})
```
**参数说明**
| 参数名 | 类型 | 必填 | 说明 |
|------------|------------|-----|---------------------|
| realName | string | 是 | 用户真实姓名 |
| idCard | string | 是 | 用户身份证号码 |
| metaInfo | String | 是 | 客户端初始化时返回的metaInfo |
**返回值**
|参数名 |类型 |说明 |
|-- |-- |-- |
|errCode |string
|
number |错误码 |
|errMsg |string |错误信息 |
|certifyId |object |认证Id;用于客户端调用认证接口及云函数获取认证结果 |
#### 获取认证结果@get-frv-auth-result
接口名:getFrvAuthResult
**接口形式**
```
js
await
uniIdCo
.
getFrvAuthResult
({
certifyId
})
```
**参数说明**
|参数名 |类型 |必填 |说明 |
|-- |-- |-- |-- |
|certifyId |string |是 |认证Id |
**返回值**
| 参数名 | 类型 | 说明 |
|---------------|---------------------|----------------------------------------------------------------------------|
| errCode | string
|
number | 错误码 |
| errMsg | string | 错误信息 |
| authStatus | number | 认证状态:0 未认证 1 等待认证 2 认证通过 3 认证失败 |
| realName | string | 姓名(脱敏);
[
敏感信息加密参考
](
/uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
|
| identity | string | 身份证号码(脱敏);
[
敏感信息加密参考
](
/uniCloud/uni-id-summary.md#sensitive-info-encrypt
)
|
### 其他功能@extra-function
### 覆盖或新增校验规则@custom-validator
...
...
@@ -2241,7 +2336,7 @@ exports.main = async (event, context) => {
## URL化请求鉴权签名@http-reqeust-auth
uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
在调用 API 时,开发者需要使用请求鉴权密钥
`requestAuthSecret`
按照 uni-id 的约定方式对请求中的关键数据进行签名值计算,
在调用 API 时,开发者需要使用请求鉴权密钥
(详见
[
配置文件
](
/uniCloud/uni-id-summary.md#config
)
)
`requestAuthSecret`
按照 uni-id 的约定方式对请求中的关键数据进行签名值计算,
并将签名值添加到Header请求头的
`uni-id-signature`
参数中传给 uni-id 进行签名验证,uni-id 会对接收到数据进行签名值计算,
并与接收到的请求签名值进行比对,如果签名值不一致,则视为无效签名,将拒绝本次请求。
...
...
@@ -2250,7 +2345,6 @@ uni-id 在URL化请求时,会对以下 API 进行调用鉴权验证,
|---|
|externalRegister|
|externalLogin|
|updateUserInfoByExternal|
### 请求头公共参数
...
...
@@ -2279,7 +2373,7 @@ class Sign {
getSignature
(
params
,
nonce
,
timestamp
)
{
const
paramsStr
=
this
.
getParamsString
(
params
)
const
signature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
this
.
requestAuthSecret
}${
nonce
}
`
).
update
(
`
${
timestamp
}${
paramsStr
}
`
).
digest
(
'
hex
'
)
const
signature
=
crypto
.
createHmac
(
'
sha256
'
,
`
${
requestAuthSecret
}${
nonce
}
`
).
update
(
`
${
timestamp
}${
paramsStr
}
`
).
digest
(
'
hex
'
)
return
signature
.
toUpperCase
()
}
...
...
docs/uniCloud/uni-id-summary.md
浏览文件 @
1c976d71
...
...
@@ -208,6 +208,10 @@ uni-id的云端配置文件在`uniCloud/cloudfunctions/common/uni-config-center/
"passwordErrorRetryTime"
:
3600
,
//
密码错误重试次数超限之后的冻结时间
"autoSetInviteCode"
:
false
,
//
是否在用户注册时自动设置邀请码,默认不自动设置
"forceInviteCode"
:
false
,
//
是否强制用户注册时必填邀请码,默认为
false
"idCardCertifyLimit"
:
1
,
//
实名认证相关;
限制每个身份证可以绑定几个账号
"realNameCertifyLimit"
:
5
,
//
实名认证相关;
限制用户每日认证次数,防止接口被刷
"sensitiveInfoEncryptSecret"
:
""
,
//
敏感信息加密密钥(长度需要大于
32
位),如使用实名认证功能需配置此密钥
"frvNeedAlivePhoto"
:
false
,
//
实名认证相关;是否获取认证照片
"app"
:
{
//
如果你使用旧版本uni-id公共模块而不是uni-id-common这里可能配置的是app-plus,务必注意调整为app
"tokenExpiresIn"
:
2592000
,
"tokenExpiresThreshold"
:
864000
,
...
...
@@ -334,10 +338,10 @@ uni-id-co 与 uni-id-pages 内的前端页面均支持这四个内置规则
|支付宝小程序端登录 |配置
`mp-alipay.oauth.alipay`
,在支付宝开放平台获取:
[
支付宝开放平台
](
https://openhome.alipay.com/develop/manage
)
|
|Apple APP端登录 |配置
`app.oauth.apple`
,在Apple开发者中心自行配置:
[
Apple开发者中心
](
https://developer.apple.com/account/resources/identifiers/list
)
|
## token令牌@token
::: warning 注意
如需保持活跃客户端的登录状态,请勿将token有效期设置一个很大的值,具体如何实现请参考:
[
保持客户端登录状态
](
#keep-client-login-state
)
## token令牌@token
::: warning 注意
如需保持活跃客户端的登录状态,请勿将token有效期设置一个很大的值,具体如何实现请参考:
[
保持客户端登录状态
](
#keep-client-login-state
)
:::
首先解释下token的概念。token是服务器颁发给客户端的一个令牌。
...
...
@@ -943,7 +947,7 @@ module.exports = {
|uni-id-token-expired |登陆状态失效,token已过期 |- |
|uni-id-check-token-failed |token校验未通过 |- |
|uni-id-account-exists |账户已存在 |- |
|uni-id-account-not-exists |账户不存在 |- |
|uni-id-account-not-exists |账户不存在 |- |
|uni-id-account-not-exists-in-current-app| 匹配到的用户不可在当前应用登录 |
|uni-id-account-conflict |用户账号冲突 |可能会由开发者手动更新数据库导致,正常情况下不应出现 |
|uni-id-account-banned |此账号已封禁 |- |
...
...
@@ -1046,14 +1050,14 @@ exports.main = async function(event, context){
}]
```
## 其他功能
### token更新及保持客户端登录状态@keep-client-login-state
一般来说token的有效期不会无限长,示例配置内web端token有效期为2小时,微信小程序为3天,app端为30天。你可以回忆一下你所用的软件,只要每天都打开就一直不需要重新登录,这样就牵扯到保持客户端的登录状态的问题。
uni-id使用了判断token剩余有效时间小于一定的阈值(配置文件内的tokenExpiresThreshold)但是大于0时自动下发新token的逻辑来保证活跃客户端一直处于登录状态,返回新token的逻辑由checkToken方法实现。具体该将token有效期和token刷新阈值设置为多少,需要根据多数用户软件使用频率来确定。
## 其他功能
### token更新及保持客户端登录状态@keep-client-login-state
一般来说token的有效期不会无限长,示例配置内web端token有效期为2小时,微信小程序为3天,app端为30天。你可以回忆一下你所用的软件,只要每天都打开就一直不需要重新登录,这样就牵扯到保持客户端的登录状态的问题。
uni-id使用了判断token剩余有效时间小于一定的阈值(配置文件内的tokenExpiresThreshold)但是大于0时自动下发新token的逻辑来保证活跃客户端一直处于登录状态,返回新token的逻辑由checkToken方法实现。具体该将token有效期和token刷新阈值设置为多少,需要根据多数用户软件使用频率来确定。
举个例子,开发者配置的token有效期(tokenExpiresIn)为1天,token刷新阈值(tokenExpiresThreshold)为8小时。用户在0点0分0秒获取了token,如果用户在16点后(token有效期已小于8小时)调用接口时执行了checkToken方法则会返回新token。
### 裂变@fission
...
...
@@ -1557,3 +1561,69 @@ module.exports = {
在
[
uniCloud 控制台
](
https://unicloud.dcloud.net.cn/
)
,找到 uni-id 所在的服务空间,在云数据库中选中
`uni-id-users`
表,点击导入按钮,上传用户数据json文件即可。
[
从文件中导入数据说明
](
https://uniapp.dcloud.net.cn/uniCloud/hellodb.html#import
)
### 实名认证@frv <Badge text="待发布" />
基于
[
实人认证
](
/uniCloud/frv/intro.md
)
服务实现,可以实现用户刷脸核验真实身份,完成实名认证。
使用此功能前需要先开通实人认证服务,服务开通流程,
[
详见
](
/uniCloud/frv/service.md
)
uni-id-pages 中内置了实名认证页面
`uni-id-pages/pages/userinfo/realname-verify/realname-verify`
。
<div
style=
"display: flex; flex-basis: 10px"
>
<div
style=
"margin-right: 10px;"
>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302072124001.jpg"
width=
"375"
/>
</div>
<div
style=
"margin-right: 10px;"
>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302071745119.jpg"
width=
"375"
/>
</div>
<div>
<img
src=
"https://web-assets.dcloud.net.cn/unidoc/zh/202302222009563.jpg"
width=
"375"
/>
</div>
</div>
如没有实名认证需求,可以将实名认证相关页面注释:
1.
在
`uni-id-pages/pages/userinfo/userinfo`
页面中,注释掉实名认证的
`uni-list-item`
标签。
2.
在
`pages.json`
中注释掉实名认证页面
`uni_modules/uni-id-pages/pages/userinfo/realname-verify/realname-verify`
。
#### 配置项说明
实名认证相关配置项如下,配置文件路径
`uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json`
,详细的uni-id配置文件
[
参考
](
#config
)
| 字段 | 类型 | 默认值 | 说明 |
|----------------------------|---------|-------|-----------------------------------------------------------|
| idCardCertifyLimit | number | 1 | 限制每个身份证可以绑定几个账号 |
| realNameCertifyLimit | number | 5 | 限制用户每日认证次数,防止接口被刷 |
| sensitiveInfoEncryptSecret | string | | 敏感信息加密密钥(长度需要大于32位); 见下方
[
敏感信息加密
](
#sensitive-info-encrypt
)
|
| frvNeedAlivePhoto | boolean | false | 是否获取认证照片 |
**注意**
-
如果设置了
`frvNeedAlivePhoto`
参数,用户认证照片会加密后存储至云存储,
[
敏感信息加密参考
](
#sensitive-info-encrypt
)
#### 接口参考
-
获取认证服务的 certifyId
[
uniIdCo.getFrvCertifyId
](
uniCloud/uni-id-pages.md#get-frv-certify-id
)
-
使用 certifyId 获取认证结果
[
uniIdCo.getFrvAuthResult
](
uniCloud/uni-id-pages.md#get-frv-auth-result
)
-
获取用户实名信息(脱敏)
[
uniIdCo.getRealNameInfo
](
uniCloud/uni-id-pages.md#get-realname-info
)
#### 敏感信息加密@sensitive-info-encrypt
用户的姓名、身份证号、实人认证照片属于用户隐私信息,为了防止隐私信息泄露,在数据存储上使用了对称加密
`aes-256-cbc`
算法对数据进行加密。
在前端页面需要使用时,例如”
[
获取用户实名信息
](
uniCloud/uni-id-pages.md#get-realname-info
)
“接口,只会返回脱敏后的数据,减少暴露风险,提高安全性。
由于加密密钥
`sensitiveInfoEncryptSecret`
来源于
`config.json`
配置文件,强烈建议更换为自定义的字符串,不要使用默认的密钥。
密钥长度最少需要32位,密钥越长破解难度越高,但不宜过长,推荐设置为32-128位之间。
实人认证照片将会上传至云存储中,阿里云与腾讯云存储路径如下:
-
阿里云
`/{uid}.b64`
-
腾讯云
`/user/id-card/{uid}.b64`
注意:文件不是图片不可直接下载打开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录