获取用户信息

SDK 1.1.3 及以上版本

let MyUser = new wx.BaaS.User()

获取当前用户信息

wx.BaaS.login() 方法会返回完成登录后的当前用户信息。

如果用户授权登录过,该方法将返回以下字段:

参数类型说明
avatarUrlString用户头像
cityString用户所在城市
countryString用户所在国家
genderString用户的性别,值为 1 时是男性,值为 2 时是女性,值为 0 时是未知
idNumber用户在用户表中的 ID
languageString用户的语言,简体中文为 zh_CN
nickNameString用户昵称 (这里的 nickName 由微信登录接口直接返回,注意与 MyUser.get 方法返回的 nickname 字段拼写上的不同)
openidString用户唯一标识,由微信生成
provinceString用户所在省份
unionidString用户在开放平台的唯一标识符,由微信生成
session_expires_atInteger指示当前登录态的过期时间,由知晓云维护。该值为一个 unix 时间戳 (SDK >= 1.11.0)

微信目前对小程序获取用户信息有两个小时的缓存设定,因此,如果一个用户修改了个人信息如头像、昵称等,需两个小时才能重新授权拿到最新的信息。如果用户未进行授权登录,将返回空。

调用此方法时请确保用户已经同意授权,请参考 登入登出章节 中关于 wx.BaaS.handleUserInfo 的使用方法

示例代码

  1. wx.BaaS.login().then(res => {
  2. // success
  3. }, err => {
  4. // err
  5. })

返回示例

  1. {
  2. "nickName": "Larry。",
  3. "gender": 1,
  4. "language": "zh_CN",
  5. "city": "Huizhou",
  6. "province": "Guangdong",
  7. "country": "China",
  8. "avatarUrl": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTK4QEMnT5dggfh4xpSuOWZicyNagricjH4jzKRI5ZFEiaBPzicp8wcQo23IEJjt8vkuAQ6rYVkYF61FVA/132",
  9. "id": 11123,
  10. "openid": "ofo380BgVHDSf3gz0QK1DYP666",
  11. "unionid": "oUsert59Z0TZHkCQ9f3Po777",
  12. "session_expires_at": 1546588122840
  13. }

获取指定用户信息

MyUser.get(userID)

参数说明

参数类型必填说明
userIDNumber用户 ID (对应 _userprofile 表中的 id 字段)

返回字段说明

当查询的用户为非当前用户时:

参数类型说明
avatarString用户头像
idNumber用户 ID (对应 _userprofile 表中的 id 字段)
nicknameString用户昵称

当查询的用户为当前用户时:

参数类型说明
avatarString用户头像
cityString用户所在城市
countryString用户所在国家
genderNumber用户的性别,值为 1 时是男性,值为 2 时是女性,值为 0 时是未知
idNumber用户 ID (对应 _userprofile 表中的 id 字段)
languageString用户的语言,简体中文为 zh_CN
nicknameString用户昵称
openidString用户唯一标识,由微信提供
provinceString用户所在省份

如果有自定义字段,则一并返回(以上两种情况皆是如此)。

请求示例

  1. let MyUser = new wx.BaaS.User()
  2. let userID = 36395395
  3. MyUser.get(userID).then(res => {
  4. // success
  5. }, err => {
  6. // err
  7. })

返回示例

非当前用户:

  1. {
  2. "statusCode": 200,
  3. "data": {
  4. "avatar": "https://media.ifanrusercontent.com/media/tavatar/9a/1d/9a1db7592d6a325a845548f2fecbfb4516e138d0.jpg",
  5. "id": 36395394,
  6. "nickname": "hip hop man"
  7. }
  8. }

当前用户:

  1. {
  2. "statusCode": 200,
  3. "data": {
  4. "avatar": "https://media.ifanrusercontent.com/media/tavatar/9a/1d/9a1db7592d6a325a845548f2fecbfb4516e138d0.jpg",
  5. "city": "Guangzhou",
  6. "country": "China",
  7. "gender": 1,
  8. "id": 36395394,
  9. "language": "en",
  10. "nickname": "hip hop man",
  11. "openid": "oXUfx0HKez4qLqgX-XSwLCpiBYS9",
  12. "province": "Guangdong"
  13. }
  14. }

筛选返回字段(SDK >= 1.11.1)

select 使用方法可以参考数据表 - 字段过滤小节

扩展字段 (SDK >= 1.11.1)

expand 使用方法可以参考数据表 - 字段扩展小节

请求示例

假设 _userprofile 表中有一个类型为 pointer 的字段,名称为 pointer_test_oder, 指向了 test_order 表

  1. let MyUser = new wx.BaaS.User()
  2. MyUser.expand(['pointer_test_oder']).select(['nickname', 'pointer_test_order']).get(123456).then((res) => {
  3. // success
  4. }, (err) => {
  5. // err
  6. })

请求结果

  1. {
  2. "statusCode": 200,
  3. "data": {
  4. "pointer_test_order": {
  5. "created_at": 1538966895,
  6. "_table": "test_order",
  7. "id": "5bbac56fbd66033df7fd0aa2",
  8. "created_by": 61736923,
  9. "updated_at": 1538966895
  10. },
  11. "nickname": "ifanrx"
  12. }
  13. }
  1. let MyUser = new wx.BaaS.User()
  2. MyUser.expand(['pointer_test_oder']).select(['nickname', 'pointer_test_oder']).find().then((res) => {
  3. // success
  4. }, (err) => {
  5. // err
  6. })

请求结果

  1. {
  2. "statusCode": 200,
  3. "data": {
  4. "meta": {
  5. "next": null,
  6. "offset": 0,
  7. "total_count": 1,
  8. "limit": 20,
  9. "previous": null
  10. },
  11. "objects": [
  12. {
  13. "pointer_test_order": {
  14. "id": "5bbac56fbd66033df7fd0aa2",
  15. "_table": "test_order",
  16. "created_by": 61736923,
  17. "updated_at": 1538966895
  18. },
  19. "nickname": "ifanrx"
  20. }
  21. ]
  22. }
  23. }

更新当前用户信息

更新用户信息与数据表更新数据项方法基本一致。这里只允许更新当前用户的信息,并且只支持对 _userprofile 表中自定义的字段进行更新。

请求示例

  1. let MyUser = new wx.BaaS.User()
  2. let currentUser = MyUser.getCurrentUserWithoutData()
  3. // age 为自定义字段
  4. currentUser.set('age', 30).update().then(res => {
  5. // success
  6. }, err => {
  7. // err
  8. })

查询,获取用户列表

用户查询与数据表查询方法一致

请求示例

  1. let MyUser = new wx.BaaS.User()
  2. // 查找所有用户
  3. MyUser.find()
  4. // 查询 nickname 中包含 like 的用户
  5. let query = new wx.BaaS.Query()
  6. query.contains('nickname', 'like')
  7. MyUser.setQuery(query).find().then(res => {
  8. // success
  9. }, err => {
  10. // err
  11. })

排序

用户查询排序与数据表排序方法一致,不包含在返回数据里的字段不支持排序,如 created_at。

请求示例

  1. let MyUser = new wx.BaaS.User()
  2. MyUser.orderBy('-nickname').find().then()

分页

用户查询分页与数据表分页方法一致。

请求示例

  1. let MyUser = new wx.BaaS.User()
  2. MyUser.limit(5).offset(10).find().then()

pointer 引用

使用 wx.BaaS.User().getWithoutData 可以创建一个 _userprofile 指定数据行的引用。主要配合 pointer 功能使用

  1. let user = new wx.BaaS.User().getWithoutData(123456)

具体使用方法请参考 数据表-添加 pointer 类型数据 小节

SDK 1.1.3 以下版本

获取当前用户信息

wx.BaaS.login 方法会返回完成登录后的当前用户信息,同时,我们也给出 wx.BaaS.storage.get('userinfo') 获取存储在 storage 的当前用户信息。

如果用户授权登录过,该方法将返回以下字段:

参数类型说明
avatarUrlString用户头像
cityString用户所在城市
countryString用户所在国家
genderString用户的性别,值为 1 时是男性,值为 2 时是女性,值为 0 时是未知
idString用户在用户表中的 ID,<span style="color:red">SDK v1.1.0 及以上版本才会返回</span>
languageString用户的语言,简体中文为 zh_CN
nickNameString用户昵称 (这里的 nickName 由微信登录接口直接返回,注意与 MyUser.get 方法返回的 nickname 字段拼写上的不同)
openidString用户唯一标识,由微信提供,<span style="color:red">SDK v1.1.0 及以上版本才会返回</span>
provinceString用户所在省份
unionidString用户在开放平台的唯一标识符,由微信提供,<span style="color:red">SDK v1.1.0 及以上版本才会返回</span>

微信目前对小程序获取用户信息有两个小时的缓存设定,因此,如果一个用户修改了个人信息如头像、昵称等,需两个小时才能重新授权拿到最新的信息。如果用户未进行授权登录,将返回空。

此时,可通过 wx.BaaS.storage.get('uid') 获取 uid (用户 id), wx.BaaS.storage.get('openid') 获取 openid, wx.BaaS.storage.get('unionid') 获取 unionid。

如果用户已在 SDK v1.1.0 之前版本完成了登录,wx.BaaS.storage.get('userinfo') 将不返回 idopenidunionid 三个字段,请配合使用 wx.BaaS.storage.get('uid') 以兼容;或者让用户重新登录一次即可。

获取指定用户信息

wx.BaaS.getUserInfo(OBJECT)

OBJECT 参数说明

参数类型必填说明
userIDNumber用户 ID (对应 _userprofile 表中的 id 字段)
user_id__inString多个用户 ID,用逗号分隔

返回字段说明当查询的用户为非当前用户时:

参数类型说明
avatarString用户头像
idNumber用户 ID
nicknameString用户昵称

出于安全性考虑,该接口目前只开放了 user id、nickname、avatar 三个字段。如需展示当前用户的完整信息,请参照上方 “获取当前用户信息”。

请求示例

  1. // 获取 userID 为 1 的用户信息(单个获取)
  2. wx.BaaS.getUserInfo({
  3. userID: 1
  4. }).then(res => {
  5. // success
  6. }, err => {
  7. // err
  8. })
  1. // 获取 userID 为 1、2、3 的用户信息(多个获取)
  2. wx.BaaS.getUserInfo({
  3. user_id__in: '1,2,3'
  4. }).then(res => {
  5. // success
  6. }, err => {
  7. // err
  8. })

userIDuser_id__in 参数必选一