currentUser

开发者可以调用 BaaS.auth.getCurrentUser() 获取 currentUser 对象,通过该对象进而对当前用户进行管理。同时登录注册等接口也会返回 currentUser 对象。

获取 currentUser 对象

BaaS.auth.getCurrentUser()

示例代码

wx.BaaS.auth.getCurrentUser().then(user => {
  // user 为 currentUser 对象
}).catch(err => {
  // HError
  if( err.code === 604 ){
    console.log('用户未登录')
  }
})
qq.BaaS.auth.getCurrentUser().then(user => {
  // user 为 currentUser 对象
}).catch(err => {
  // HError
  if( err.code === 604 ){
    console.log('用户未登录')
  }
})
BaaS.auth.getCurrentUser().then(user => {
  // user 为 currentUser 对象
}).catch(err => {
  // HError
  if( err.code === 604 ){
    console.log('用户未登录')
  }
})
my.BaaS.auth.getCurrentUser().then(user => {
  // user 为 currentUser 对象
}).catch(err => {
  // HError
  if( err.code === 604 ){
    console.log('用户未登录')
  }
})

若当前为未登录状态,则会抛出错误。

currentUser 对象说明

currentUser 代表了当前登录的用户,开发者可以通过浏览 currentUser 上的字段来获取当前用户的信息,通过调用 currentUser 上的方法来更新用户信息。 该对象关联 _userprofile 表中 id 为当前用户 ID 的数据行。currentUser 字段包含了 _userprofile表的所有的内置字段,自定义字段可以通过 currentUser.get(key) 来获取。

// currentUser 数据结构
{
  avatar: "...",
  city: "...",
  country: "...",
  created_at: 1557474865,
  created_by: 45768973992321,
  gender: 1,
  get: function (key) {}
  id: 45768973992321,
  is_authorized: true,
  language: "...",
  nickname: "...",
  openid: "...",  // 微信小程序用户的唯一标识,非微信用户将返回空值。同时,微信小程序 openid 也会和其他平台一样,在 _provider 里存储一份。
  province: "...",
  session_expires_at": 1561283491,
  toJSON: function () {},
  unionid: "...",  // 微信开发平台用户的唯一标识,非微信用户将返回空值
  updated_at: 1558691521,
  user_id: 45768973992321,
  _anonymous: false,
  _email_verified : false,
  _provider: {
    alipay: {
      avatar: "...",
      province: "...",
      city: "...",
      nick_name: "...",
      is_student: true,
      user_type: "...",
      user_status: "...",
      verified: true,
      gender: "..."
    },
    wechat: {
      avatar: "...",
      city: "...",
      country: "...",
      gender: 1,
      language: "...",
      nickname: "...",
      openid: "...",
      province: "...",
      unionid: "...",
    }
  }
}

获取用户自定义字段

开发者可能会在 _userprofile 表中定义一些自定义字段,要拿到这些自定义字段信息,可以通过如下两个 API 来获取:

  • currentUser.get(key)
  • currentUser.toJSON()

currentUser.get(key)

通过 currentUser.get(key) 可以获取用户的单个字段(包括内置字段和自定义字段)。

示例代码

假设开发者在 _userprofile 表中定义了 custom_name 列,并设置当前用户的 custom_nameifanrx。则在 SDK 中查询当前用户自定义字段代码如下:

wx.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.get('custom_name')) //  ifanrx
})
qq.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.get('custom_name')) //  ifanrx
})
BaaS.auth.getCurrentUser().then(user => {
  console.log(user.get('custom_name')) //  ifanrx
})
my.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.get('custom_name')) //  ifanrx
})

currentUser.toJSON()

可以通过 currentUser.toJSON() API,来获得一次性获取完整的用户信息。

示例代码 假设开发者在 _userprofile 表中定义了 custom_name 列,并设置当前用户的 custom_nameifanrx。则在 SDK 中查询当前用户自定义字段代码如下:

wx.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.toJSON())
})
qq.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.toJSON())
})
BaaS.auth.getCurrentUser().then(user => {
  console.log(user.toJSON())
})
my.BaaS.auth.getCurrentUser().then(user => {
  console.log(user.toJSON())
})

返回示例

{
      "id": 5123461461,
      "avatar": "http://cdn.ifanr.cn/ifanr/default_avatar.png",
      "nickname": "riDGldYXLHouWIYx",
      "_anonymous": false,
      "_username": "myusername",
      "_email": "myemail@somemail.com",
      "_email_verified": false,
      "_provider": {
        "alipay": {
          "avatar": "http://tfsimg.alipay.com/images/partner/T1uIxXXbpXXXXXXXX",
          "province": "安徽省",
          "city": "安庆",
          "nick_name": "支付宝小二",
          "is_student": true,
          "user_type": "company_account",
          "user_status": "authenticated",
          "verified": true,
          "gender": "F"
        }
      }
}

字段说明请参考 获取用户信息小节

判断用户是否是匿名用户

wx.BaaS.auth.getCurrentUser().then(user => {
  if (user._anonymous) {
    // 匿名用户
  } else {
    // 非匿名用户
  }
})
qq.BaaS.auth.getCurrentUser().then(user => {
  if (user._anonymous) {
    // 匿名用户
  } else {
    // 非匿名用户
  }
})
BaaS.auth.getCurrentUser().then(user => {
  if (user._anonymous) {
    // 匿名用户
  } else {
    // 非匿名用户
  }
})
my.BaaS.auth.getCurrentUser().then(user => {
  if (user._anonymous) {
    // 匿名用户
  } else {
    // 非匿名用户
  }
})

设置用户信息

currentUser 对象提供了一些方法,用于修改当前用户信息。

常见使用场景:

  • 用户的用户名/邮箱设置有误,需要修改为新的用户名/邮箱。
  • 用户使用小程序授权登录后,通过设置用户名或邮箱,以便下次通过用户名或邮箱登录。

除更新自定义字段外,其他方法匿名用户无法调用

初始化账号信息

匿名用户无法调用

currentUser.setAccount({username, email, password})

用户通过微信、支付宝授权登录后,可以设置用户名、邮箱、密码,以便下次通过用户名或邮箱登录。

参数说明

名称 类型 必填 说明
username String N 用户名
email String N 邮箱
password String Y 初始密码

示例代码

// ...
wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setAccount({username: 'hello', email: 'hello@ifanr.com', password: '111111'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
// ...
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setAccount({username: 'hello', email: 'hello@ifanr.com', password: '111111'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
// ...
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setAccount({username: 'hello', email: 'hello@ifanr.com', password: '111111'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
// ...
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setAccount({username: 'hello', email: 'hello@ifanr.com', password: '111111'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

设置用户名

匿名用户无法调用

用户名不区分大小写。当用户设置了 username 为 ifanrx 的账号后,其他人不能再注册诸如 Ifanrx、IfAnrx、IFANRX 等账号了

currentUser.setUsername(username)

参数说明

名称 类型 说明
username String 新用户名

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setUsername('ifanrx_new')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setUsername('ifanrx_new')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setUsername('ifanrx_new')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setUsername('ifanrx_new')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

返回结果说明

user 为 currentUser 对象,该对象的说明见上文

err 对象结构请参考错误码和 HError 对象

设置邮箱

匿名用户无法调用

邮箱中的英文字母会被强制转换为小写。例如 iFanrX@Hello.com 会被转换成 ifanrx@hello.com

currentUser.setEmail(email, {sendVerificationEmail})

参数说明

名称 类型 必填 说明
email String Y 新邮箱
sendVerificationEmail Boolean N 是否发送验证邮件,默认为 false

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setEmail('ifanrx_new@ifanr.com', {sendVerificationEmail: true})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setEmail('ifanrx_new@ifanr.com', {sendVerificationEmail: true})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setEmail('ifanrx_new@ifanr.com', {sendVerificationEmail: true})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setEmail('ifanrx_new@ifanr.com', {sendVerificationEmail: true})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

返回结果说明

user 为 currentUser 对象,该对象的说明见上文

err 对象结构请参考错误码和 HError 对象

设置手机号

匿名用户无法调用

重新设置手机号后,需要重新验证手机号。

currentUser.setMobilePhone(mobilePhone)

参数说明

名称 类型 必填 说明
mobilePhone String Y 新手机号

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setMobilePhone('15000000000')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setMobilePhone('15000000000')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setMobilePhone('15000000000')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.setMobilePhone('15000000000')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

返回结果说明

user 为 currentUser 对象,该对象的说明见上文

err 对象结构请参考错误码和 HError 对象

验证手机号

匿名用户无法调用

短信验证码 smsCode 通过接口 BaaS.sendSmsCode() 获取,请查看文档

currentUser.verifyMobilePhone(smsCode)

参数说明

名称 类型 必填 说明
smsCode String Y 短信验证码

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.verifyMobilePhone('123456')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.verifyMobilePhone('123456')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.verifyMobilePhone('123456')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.verifyMobilePhone('123456')
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

返回结果说明

user 为 currentUser 对象,该对象的说明见上文

err 对象结构请参考错误码和 HError 对象

更新密码

匿名用户无法调用

currentUser.updatePassword({password, newPassword})

参数说明:

名称 类型 说明
password String 用户密码 (若用户当前密码为空则为
newPassword String 新用户密码 (若用户当前密码为空则为必填

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.updatePassword({password: '111111', newPassword: '222222'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.updatePassword({password: '111111', newPassword: '222222'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.updatePassword({password: '111111', newPassword: '222222'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.updatePassword({password: '111111', newPassword: '222222'})
  }).then(user => {
    console.log(user)
  }).catch(err => {
    // HError
  })

返回结果说明

user 为 currentUser 对象,该对象的说明见上文 err 对象结构请参考错误码和 HError 对象

更新用户自定义字段

更新用户信息与数据表更新数据项方法基本一致。这里只允许更新 _userprofile 表中自定义的字段。

请求示例

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    // age 为自定义字段
    return user.set('age', 30).update()
  }).then(user => {
    // success
  }).catch(err => {
    // err 为 HError 对象
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    // age 为自定义字段
    return user.set('age', 30).update()
  }).then(user => {
    // success
  }).catch(err => {
    // err 为 HError 对象
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    // age 为自定义字段
    return user.set('age', 30).update()
  }).then(user => {
    // success
  }).catch(err => {
    // err 为 HError 对象
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    // age 为自定义字段
    return user.set('age', 30).update()
  }).then(user => {
    // success
  }).catch(err => {
    // err 为 HError 对象
  })

邮箱验证

匿名用户无法调用

currentUser.requestEmailVerification()

当用户通过邮箱注册后或者修改了邮箱后,开发者可能希望对用户填写的邮箱真实性进行校验, 调用该 API 后,知晓云会向当前用户发送一封验证邮件,用户可以打开邮件并进行验证操作。

示例代码

wx.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.requestEmailVerification()
  }).then(res => {
    console.log(res)
  }).catch(err => {
    // HError
  })
qq.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.requestEmailVerification()
  }).then(res => {
    console.log(res)
  }).catch(err => {
    // HError
  })
BaaS.auth.getCurrentUser()
  .then(user => {
    return user.requestEmailVerification()
  }).then(res => {
    console.log(res)
  }).catch(err => {
    // HError
  })
my.BaaS.auth.getCurrentUser()
  .then(user => {
    return user.requestEmailVerification()
  }).then(res => {
    console.log(res)
  }).catch(err => {
    // HError
  })

返回结果

成功时 res 结构如下

{
  "statusCode": 201,
  "data": { "status": "ok" }
}

err 对象结构请参考错误码和 HError 对象

同步第一层级用户信息

2.x 支持多平台登录,第三方登录(微信小程序中使用微信登录与支付宝小程序中使用支付宝登录,都属于第三方登录) 后获取到的用户信息保存在 userpofile 记录的 _provider 字段(参照上文 currentUser 中的 _provider 字段)中, 而 1.x 的用户数据保存在与 _provider 用一层级(即第一层级)的字段中,为了使相关代码能平滑升级到 2.x, 第一层级的用户信息字段被保留了下来,并提供了接口让开发者决定是否在用户授权的时候,同步第一层级的用户信息。

支持的接口:

  1. 微信登录
    1. wx.BaaS.loginWithWechat(data, {syncUserProfile})
    2. UserRecord.linkWechat(data, {syncUserProfile})
  2. 支付宝登录
    1. my.BaaS.loginWithAlipay({forceLogin, syncUserProfile})
    2. UserRecord.linkAlipay({forceLogin, syncUserProfile})

支持同步的字段:

  1. nickname: 昵称
  2. avatar: 头像
  3. gender: 性别(仅微信)
  4. language: 语言
  5. city: 城市
  6. province: 省份
  7. country: 国家

results matching ""

    powered by

    No results matching ""