123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- const {
- findUser
- } = require('../../lib/utils/account')
- const {
- ERROR
- } = require('../../common/error')
- const {
- userCollection
- } = require('../../common/constants')
- const PasswordUtils = require('../../lib/utils/password')
- /**
- * 修改用户
- * @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#update-user
- * @param {Object} params
- * @param {String} params.uid 要更新的用户id
- * @param {String} params.username 用户名
- * @param {String} params.password 密码
- * @param {String} params.nickname 昵称
- * @param {Array} params.authorizedApp 允许登录的AppID列表
- * @param {Array} params.role 用户角色列表
- * @param {String} params.mobile 手机号
- * @param {String} params.email 邮箱
- * @param {Array} params.tags 用户标签
- * @param {Number} params.status 用户状态
- * @returns
- */
- module.exports = async function (params = {}) {
- const schema = {
- uid: 'string',
- username: 'username',
- password: {
- required: false,
- type: 'password'
- },
- authorizedApp: {
- required: false,
- type: 'array<string>'
- }, // 指定允许登录的app,传空数组或不传时表示可以不可以在任何端登录
- nickname: {
- required: false,
- type: 'nickname'
- },
- role: {
- require: false,
- type: 'array<string>'
- },
- mobile: {
- required: false,
- type: 'mobile'
- },
- email: {
- required: false,
- type: 'email'
- },
- tags: {
- required: false,
- type: 'array<string>'
- },
- status: {
- required: false,
- type: 'number'
- }
- }
- this.middleware.validate(params, schema)
- const {
- uid,
- username,
- password,
- authorizedApp,
- nickname,
- role,
- mobile,
- email,
- tags,
- status
- } = params
- // 更新的用户数据字段
- const data = {
- username,
- dcloud_appid: authorizedApp || [],
- nickname,
- role: role || [],
- mobile,
- email,
- tags: tags || [],
- status
- }
- // 更新用户名时验证用户名是否重新
- if (username) {
- const userMatched = await findUser({
- userQuery: {
- username
- },
- authorizedApp
- })
- if (userMatched.filter(user => user._id !== uid).length) {
- throw {
- errCode: ERROR.ACCOUNT_EXISTS
- }
- }
- }
- if (password) {
- const passwordUtils = new PasswordUtils({
- passwordSecret: this.config.passwordSecret
- })
- const {
- passwordHash,
- version
- } = passwordUtils.generatePasswordHash({
- password
- })
- data.password = passwordHash
- data.password_secret_version = version
- }
- await userCollection.doc(uid).update(data)
- return {
- errCode: 0
- }
- }
|