diff --git a/cloud-function/node-sdk/wx-update-user-info.md b/cloud-function/node-sdk/wx-update-user-info.md
index 6a79b9e5..62f9923f 100644
--- a/cloud-function/node-sdk/wx-update-user-info.md
+++ b/cloud-function/node-sdk/wx-update-user-info.md
@@ -1,5 +1,9 @@
-# 微信更新用户信息
+# `已废弃` 微信更新用户信息
+> **danger**
+> 从 2022 年 11 月 8 日 24 时开始,小程序 `wx.getUserProfile` 和 `wx.getUserInfo` 接口将被微信收回,其中获取用户头像将统一返回默认灰色头像,昵称将统一返回“微信用户”。请参考 [小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)。
+
+
> **info**
> SDK >= 3.17.0
diff --git a/js-sdk/account.md b/js-sdk/account.md
index 43592149..d9e27354 100644
--- a/js-sdk/account.md
+++ b/js-sdk/account.md
@@ -239,6 +239,38 @@ user 为 currentUser 对象,该对象的说明见上文
err 对象结构请参考[错误码和 HError 对象](/js-sdk/error-code.md)
+### 设置头像和昵称
+
+设置头像和昵称与[数据表更新数据项](schema/update-record.md)方法基本一致。
+
+> **info**
+> 基于安全考虑,设置头像和昵称需先进行违规检测。详见 [检测违规图片、音频、文本](./wechat/censor.md)。
+
+**请求示例**
+
+{% ifanrxCodeTabs %}
+```js
+// 下面以更新昵称为例:
+const updateNickname = async () => {
+ const nickname = 'John Doe'
+
+ try {
+ const censor = await wx.BaaS.wxCensorText(nickname)
+
+ if (censor.data.risky) {
+ // 处理昵称文本不合法的情况...
+ return
+ }
+
+ const user = await wx.BaaS.auth.getCurrentUser()
+ user.set('nickname', nickname).update()
+ } catch (error) {
+ // 处理错误情况 HError
+ }
+}
+```
+{% endifanrxCodeTabs %}
+
### 设置邮箱
diff --git a/js-sdk/wechat/signin-signout.md b/js-sdk/wechat/signin-signout.md
index a5309fb8..c290c466 100644
--- a/js-sdk/wechat/signin-signout.md
+++ b/js-sdk/wechat/signin-signout.md
@@ -13,18 +13,22 @@
SDK 提供了快速登录小程序的接口,省去使用微信登录接口时获取 code, session_key 等辅助操作。
+> **danger**
+> 从 2022 年 11 月 8 日 24 时开始,小程序 `wx.getUserProfile` 和 `wx.getUserInfo` 接口将被微信收回,其中获取用户头像将统一返回默认灰色头像,昵称将统一返回“微信用户”。请参考 [小程序用户头像昵称获取规则调整公告](https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01)。
+>
+> 为应对微信的调整,小程序 SDK 提供更新头像和昵称支持。通过 `wx.BaaS.auth.getCurrentUser()` 获取当前用户,并执行内置的 `update()` 方法即可达成更新。详见 [设置头像和昵称](../account.md#设置头像和昵称)。
+
+
> **danger**
> 从 2021 年 4 月 28 日后发布的小程序新版本,无法通过 wx.getUserInfo 与 `` 获取加密的用户个人信息,而需要通过新增的 getUserProfile 接口获取。请参考 [小程序登录、用户信息相关接口调整说明](https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?blockType=1)。
>
> 为应对微信的调整,小程序 SDK v3.18.0 中将会调整 `wx.BaaS.auth.loginWithWechat()` 登录方法,只保留静默登录和一键授权手机号登录两部分,并提供新的更新用户信息方法 `wx.BaaS.auth.updateUserInfo()`。弹框授权个人信息的执行时机将会返回给开发者自行判断。
-
+
> **info**
> 注意:新发布的小程序中,开发者在用户登录时可直接获取到 unionID。
-小程序建议的登录流程是,可通过 `wx.BaaS.auth.loginWithWechat()` 获取用户 openID,这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。当必须要获得用户的头像昵称等信息时,调用 `wx.getUserProfile` 接口,并将返回结果通过 `wx.BaaS.auth.updateUserInfo()` 方法更新用户信息。
-
-同时,云函数 Node-SDK 也提供更新用户信息方法,详见[这里](/cloud-function/node-sdk/wx-update-user-info.md)。默认情况下只允许云函数更新用户信息,如需要开启 JS-SDK 更新,可在控制台 `开发 - 设置 - SDK - 微信小程序` 中打开 `允许在 SDK 更新用户信息` 开关。
+小程序建议的登录流程是,可通过 `wx.BaaS.auth.loginWithWechat()` 获取用户 openID,这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。
## 静默登录
@@ -145,112 +149,6 @@ catch 回调中的 res 对象示例:
res 对象结构请参考[错误码和 HError 对象](/js-sdk/error-code.md)
-
-## 更新用户信息
-
-开发者需要提前调用 `wx.getUserProfile` 获取用户信息,并调用以下方法更新。
-
-`wx.BaaS.auth.updateUserInfo(data, {code, syncUserProfile})`
-
-> **danger**
-> 注意:在微信开发者工具中使用基础库版本小于 2.16.0 并调用 `wx.getUserProfile` 时是无法获取到 iv、rawData、signature 和 encryptedData 等字段的。为应对微信的调整,小程序基础库版本大于等于 2.16.0 时开发者需要先通过 `wx.login` 获取用户登录凭证 `code`,并调用 `wx.getUserProfile` 获取用户信息,再传入 `updateUserInfo` 方法。基础库版本小于 2.16.0 则无需调用 wx.login 方法,直接调用 wx.getUserProfile 即可。
->
-> 同时,由于微信限制了 wx.getUserProfile 不能直接在 wx.login 的回调中调用,因此开发者需注意调用方法的顺序。也就是说,先调用 `wx.login` 方法,再调用 `wx.getUserProfile`。SDK 推荐使用 Promise.all 的方式处理上述问题。
-
-
-> **info**
-> 由于 `wx.getUserProfile` 必须在点击事件里触发,无法直接在回调中调用,因此开发者需要注意区分登录 `wx.BaaS.auth.loginWithWechat` 和 `wx.getUserProfile` 的调用时机。
-
-**参数说明**
-
-| 参数 | 类型 | 必填 | 说明 |
-| :-------------- | :------ | :------ | :----------- |
-| data | Object | 是 | wx.getUserProfile 事件回调返回的参数 |
-| code | Object | 否 | 用户登录凭证,基础库大于等于 2.16.0 时必填 |
-| syncUserProfile | String | 否 | 是否[同步第一层级用户信息](/js-sdk/account.md#同步第一层级用户信息),可选值为 `overwrite`、`setnx`、`false`,默认值为 `setnx`|
-
-**请求示例**
-
-基础库版本大于等于 `2.16.0`:
-
-```js
-Page({
- // ...
- updateUserInfo() {
- const _getLoginCode = new Promise(resolve => {
- wx.login({
- success: res => resolve(res.code)
- })
- })
-
- const _getUserProfile = new Promise(resolve => {
- wx.getUserProfile({
- desc: '获取用户信息',
- success: res => resolve(res)
- })
- })
-
- Promise.all([_getLoginCode, _getUserProfile]).then(result => {
- const [code, userProfile] = result
- wx.BaaS.auth.updateUserInfo(userProfile, {code}).then(res => {
- // user 包含用户完整信息,详见下方描述
- }, err => {
- // **err 有两种情况**:用户拒绝授权,HError 对象上会包含基本用户信息:id、openid、unionid;其他类型的错误,如网络断开、请求超时等,将返回 HError 对象(详情见下方注解)
- })
- })
- },
- // ...
-})
-```
-
-基础库小于 `2.16.0`:
-
-```js
-Page({
- // ...
- updateUserInfo() {
- wx.getUserProfile({
- desc: '更新用户信息',
- success: data => {
- wx.BaaS.auth.updateUserInfo(data).then(user => {
- // user 包含用户完整信息,详见下方描述
- }, err => {
- // **err 有两种情况**:用户拒绝授权,HError 对象上会包含基本用户信息:id、openid、unionid;其他类型的错误,如网络断开、请求超时等,将返回 HError 对象(详情见下方注解)
- })
- }
- })
- },
- // ...
-})
-```
-
-**用户同意授权返回示例**
-then 回调中的 user 对象为 currentUser 对象,请参考[currentUser 小节](../account.md) :
-
-
-**用户拒绝授权示例**
- catch 回调中的 HError 对象示例:
-
-```json
-{
- "id": 61736923,
- "openid": "ofo380BgVHDSf3gz0QK1DYPGnLxx",
- "unionid": "",
- "code": 603,
- "message": "unauthorized"
-}
-```
-
-**其他错误**
-catch 回调中的 res 对象示例:
-
-res 对象结构请参考[错误码和 HError 对象](/js-sdk/error-code.md)
-
-> **info**
-> `wx.BaaS.auth.updateUserInfo` 需要用户已登录,若未登录,该接口会返回 604 错误。
-> 如果未在控制台开启“允许在 SDK 更新用户信息”开关,该接口会返回 616 错误。
-
-
## 更新用户手机号
开发者需要提供按钮的方式,令用户触发授权手机号操作。更新之后,用户表的 phone_verified 字段会更新为 true ,省掉了验证手机号的过程。
@@ -423,14 +321,6 @@ wx.getUserInfo({
})
```
-## `已废弃` 登入登出(SDK < 3.18.0)
-
-
-> **danger**
-> 从 2018 年 4 月 30 日开始,在小程序的体验版和开发版调用 wx.getUserInfo 接口,将默认调用失败。为应对微信的调整,我们在 SDK v1.4.0 中增加了对新的登录流程的支持,因此也推荐你使用新的 SDK 接口来完成登录和获取用户信息功能。关于最佳的登录实践,可参考 [微信登录能力优化](https://mp.weixin.qq.com/s?__biz=MjM5NDAxMDg4MA==&mid=2650959412&idx=1&sn=9a140ac9622845b4c362ab686a877197)
-
-小程序建议的登录流程是,通过 `wx.BaaS.auth.loginWithWechat()` 获取用户 openID, 这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。当必须要获得用户的头像昵称等信息时,才让用户点击 button(open-type="getUserInfo" ),弹框授权。
-
## 请求用户授权
开发者需要提供按钮的方式,令用户触发授权操作
@@ -503,6 +393,120 @@ res 对象结构请参考[错误码和 HError 对象](/js-sdk/error-code.md)
> `wx.BaaS.auth.loginWithWechat` 默认会检查用户是否已登录,若未登录,该接口默认会先执行登录操作
+## `已废弃` 更新用户信息
+
+开发者需要提前调用 `wx.getUserProfile` 获取用户信息,并调用以下方法更新。
+
+`wx.BaaS.auth.updateUserInfo(data, {code, syncUserProfile})`
+
+> **danger**
+> 注意:在微信开发者工具中使用基础库版本小于 2.16.0 并调用 `wx.getUserProfile` 时是无法获取到 iv、rawData、signature 和 encryptedData 等字段的。为应对微信的调整,小程序基础库版本大于等于 2.16.0 时开发者需要先通过 `wx.login` 获取用户登录凭证 `code`,并调用 `wx.getUserProfile` 获取用户信息,再传入 `updateUserInfo` 方法。基础库版本小于 2.16.0 则无需调用 wx.login 方法,直接调用 wx.getUserProfile 即可。
+>
+> 同时,由于微信限制了 wx.getUserProfile 不能直接在 wx.login 的回调中调用,因此开发者需注意调用方法的顺序。也就是说,先调用 `wx.login` 方法,再调用 `wx.getUserProfile`。SDK 推荐使用 Promise.all 的方式处理上述问题。
+
+
+> **info**
+> 由于 `wx.getUserProfile` 必须在点击事件里触发,无法直接在回调中调用,因此开发者需要注意区分登录 `wx.BaaS.auth.loginWithWechat` 和 `wx.getUserProfile` 的调用时机。
+
+**参数说明**
+
+| 参数 | 类型 | 必填 | 说明 |
+| :-------------- | :------ | :------ | :----------- |
+| data | Object | 是 | wx.getUserProfile 事件回调返回的参数 |
+| code | Object | 否 | 用户登录凭证,基础库大于等于 2.16.0 时必填 |
+| syncUserProfile | String | 否 | 是否[同步第一层级用户信息](/js-sdk/account.md#同步第一层级用户信息),可选值为 `overwrite`、`setnx`、`false`,默认值为 `setnx`|
+
+**请求示例**
+
+基础库版本大于等于 `2.16.0`:
+
+```js
+Page({
+ // ...
+ updateUserInfo() {
+ const _getLoginCode = new Promise(resolve => {
+ wx.login({
+ success: res => resolve(res.code)
+ })
+ })
+
+ const _getUserProfile = new Promise(resolve => {
+ wx.getUserProfile({
+ desc: '获取用户信息',
+ success: res => resolve(res)
+ })
+ })
+
+ Promise.all([_getLoginCode, _getUserProfile]).then(result => {
+ const [code, userProfile] = result
+ wx.BaaS.auth.updateUserInfo(userProfile, {code}).then(res => {
+ // user 包含用户完整信息,详见下方描述
+ }, err => {
+ // **err 有两种情况**:用户拒绝授权,HError 对象上会包含基本用户信息:id、openid、unionid;其他类型的错误,如网络断开、请求超时等,将返回 HError 对象(详情见下方注解)
+ })
+ })
+ },
+ // ...
+})
+```
+
+基础库小于 `2.16.0`:
+
+```js
+Page({
+ // ...
+ updateUserInfo() {
+ wx.getUserProfile({
+ desc: '更新用户信息',
+ success: data => {
+ wx.BaaS.auth.updateUserInfo(data).then(user => {
+ // user 包含用户完整信息,详见下方描述
+ }, err => {
+ // **err 有两种情况**:用户拒绝授权,HError 对象上会包含基本用户信息:id、openid、unionid;其他类型的错误,如网络断开、请求超时等,将返回 HError 对象(详情见下方注解)
+ })
+ }
+ })
+ },
+ // ...
+})
+```
+
+**用户同意授权返回示例**
+then 回调中的 user 对象为 currentUser 对象,请参考[currentUser 小节](../account.md) :
+
+
+**用户拒绝授权示例**
+ catch 回调中的 HError 对象示例:
+
+```json
+{
+ "id": 61736923,
+ "openid": "ofo380BgVHDSf3gz0QK1DYPGnLxx",
+ "unionid": "",
+ "code": 603,
+ "message": "unauthorized"
+}
+```
+
+**其他错误**
+catch 回调中的 res 对象示例:
+
+res 对象结构请参考[错误码和 HError 对象](/js-sdk/error-code.md)
+
+> **info**
+> `wx.BaaS.auth.updateUserInfo` 需要用户已登录,若未登录,该接口会返回 604 错误。
+> 如果未在控制台开启“允许在 SDK 更新用户信息”开关,该接口会返回 616 错误。
+
+
+## `已废弃` 登入登出(SDK < 3.18.0)
+
+
+> **danger**
+> 从 2018 年 4 月 30 日开始,在小程序的体验版和开发版调用 wx.getUserInfo 接口,将默认调用失败。为应对微信的调整,我们在 SDK v1.4.0 中增加了对新的登录流程的支持,因此也推荐你使用新的 SDK 接口来完成登录和获取用户信息功能。关于最佳的登录实践,可参考 [微信登录能力优化](https://mp.weixin.qq.com/s?__biz=MjM5NDAxMDg4MA==&mid=2650959412&idx=1&sn=9a140ac9622845b4c362ab686a877197)
+
+小程序建议的登录流程是,通过 `wx.BaaS.auth.loginWithWechat()` 获取用户 openID, 这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。当必须要获得用户的头像昵称等信息时,才让用户点击 button(open-type="getUserInfo" ),弹框授权。
+
+
## `已废弃` 登入登出(SDK < 2.0.0)
> **info**