95 lines
1.8 KiB
JavaScript
95 lines
1.8 KiB
JavaScript
const {
|
|
preLoginWithPassword,
|
|
postLogin
|
|
} = require('../../lib/utils/login')
|
|
const {
|
|
getNeedCaptcha,
|
|
verifyCaptcha
|
|
} = require('../../lib/utils/captcha')
|
|
const {
|
|
CAPTCHA_SCENE
|
|
} = require('../../common/constants')
|
|
const {
|
|
ERROR
|
|
} = require('../../common/error')
|
|
|
|
/**
|
|
* 用户名密码登录
|
|
* @tutorial https://uniapp.dcloud.net.cn/uniCloud/uni-id-pages.html#login
|
|
* @param {Object} params
|
|
* @param {String} params.username 用户名
|
|
* @param {String} params.mobile 手机号
|
|
* @param {String} params.email 邮箱
|
|
* @param {String} params.password 密码
|
|
* @param {String} params.captcha 图形验证码
|
|
* @returns
|
|
*/
|
|
module.exports = async function (params = {}) {
|
|
const schema = {
|
|
username: {
|
|
required: false,
|
|
type: 'username'
|
|
},
|
|
mobile: {
|
|
required: false,
|
|
type: 'mobile'
|
|
},
|
|
email: {
|
|
required: false,
|
|
type: 'email'
|
|
},
|
|
password: 'password',
|
|
captcha: {
|
|
required: false,
|
|
type: 'string'
|
|
}
|
|
}
|
|
this.middleware.validate(params, schema)
|
|
const {
|
|
username,
|
|
mobile,
|
|
email,
|
|
password,
|
|
captcha
|
|
} = params
|
|
if (!username && !mobile && !email) {
|
|
throw {
|
|
errCode: ERROR.INVALID_USERNAME
|
|
}
|
|
} else if (
|
|
(username && email) ||
|
|
(username && mobile) ||
|
|
(email && mobile)
|
|
) {
|
|
throw {
|
|
errCode: ERROR.INVALID_PARAM
|
|
}
|
|
}
|
|
const needCaptcha = await getNeedCaptcha.call(this, {
|
|
username,
|
|
mobile,
|
|
email
|
|
})
|
|
if (needCaptcha) {
|
|
await verifyCaptcha.call(this, {
|
|
captcha,
|
|
scene: CAPTCHA_SCENE.LOGIN_BY_PWD
|
|
})
|
|
}
|
|
const {
|
|
user,
|
|
extraData
|
|
} = await preLoginWithPassword.call(this, {
|
|
user: {
|
|
username,
|
|
mobile,
|
|
email
|
|
},
|
|
password
|
|
})
|
|
return postLogin.call(this, {
|
|
user,
|
|
extraData
|
|
})
|
|
}
|