This commit is contained in:
chaosBreaking
2019-08-31 14:59:13 +08:00
commit dc5423d356
65 changed files with 3813 additions and 0 deletions

View File

@@ -0,0 +1,204 @@
const Crypto = require('../../utils/crypto');
const { createToken } = require('../../utils/jwt');
const { inject } = require('../../common/Provider');
const User = require('../user/user.model');
const Code = require('../msgCode/msgCode.controller');
const { createNewUser } = require('../user/user.controller');
const CODE_TYPE = Code.CODE_TYPE;
const msgCodeSignIn = async function (phone, code) {
const validCode = await Code.verifyCode({ id: phone, code, type: CODE_TYPE['msgSignIn'] });
return validCode ? await User.findOne({
phone,
}).exec() : null;
};
module.exports = {
checkExist: async function (req, res) {
// method GET
const { phone }= req.query;
const isExist = await User.exists({ phone });
if (isExist) res.json({
code: 0,
msg: ''
});
else res.json({
code: 1,
msg: ''
});
},
signIn: inject(function(SysConfig) {
const { JWT_SECRET, PWD_HASH_SALT } = SysConfig;
return async (req, res) => {
let { phone, password, code } = req.body;
let user;
if (code) {
user = await msgCodeSignIn(phone, code);
} else {
password = Crypto.hash(password, { salt: PWD_HASH_SALT });
user = await User.findOne({
phone,
password
}).exec();
}
if (user) {
const token = createToken({
userId: user.id
}, JWT_SECRET, {});
res.json({
code: 0,
msg: 'success',
data: {
id: user.id,
nickname: user.nickname,
phone: user.phone,
email: user.email,
token
}
});
} else {
res.json({
code: 1,
error: 'unknow user'
});
}
};
}),
signUp: inject(function(SysConfig) {
const { JWT_SECRET, PWD_HASH_SALT } = SysConfig;
return async (req, res) => {
let { phone, code, inviter, password } = req.body;
if (!phone || !code || !password) return res.json({
code: 1,
msg: 'Missing required parameters'
});
const isCodeValid = await Code.verifyCode({ id: phone, code, type: CODE_TYPE['signUp'] });
password = Crypto.hash(password, { salt: PWD_HASH_SALT });
if (isCodeValid) {
createNewUser({
phone,
inviter,
password
}).then(user => {
const token = createToken({
userId: user.id
}, JWT_SECRET, {});
res.json({
code: 0,
msg: 'success',
data: {
//刚注册需要返回的应该只有token其他的没意义
token
}
});
})
.catch(err => {
res.json({
code: 3,
msg: err,
});
});
} else {
res.json({
code: 2,
msg: 'Invalid code',
});
}
};
}),
forgetPasswd: inject(function(SysConfig) {
const { PWD_HASH_SALT } = SysConfig;
return async (req, res) => {
const { phone, password, code } = req.body;
const validCode = await Code.verifyCode({
id: phone,
code,
type: CODE_TYPE['forgetPasswd']
});
if (!validCode) {
res.json({
code: 1,
msg: 'Incorrect code'
});
}
const newPasswd = Crypto.hash(password, PWD_HASH_SALT);
const query = { phone };
const update = { password: newPasswd };
// eslint-disable-next-line no-unused-vars
const success = await User.findOneAndUpdate(query, update, { new: true }).exec().catch(err => null);
if (success) {
res.json({
code: 0,
msg: 'Reseted passwd'
});
} else {
res.json({
code: 500,
msg: 'unknow error'
});
}
};
}),
changePasswd: inject(function (SysConfig) {
const { PWD_HASH_SALT } = SysConfig;
return async (req, res) => {
const { phone, password, code } = req.body;
const validCode = await Code.verifyCode({
id: phone,
code,
type: CODE_TYPE['changePasswd']
});
if (!validCode) {
res.json({
code: 1,
msg: 'Incorrect code'
});
}
const newPasswd = Crypto.hash(password, PWD_HASH_SALT);
const query = { phone };
const update = { password: newPasswd };
// eslint-disable-next-line no-unused-vars
const success = await User.findOneAndUpdate(query, update, { new: true }).exec().catch(err => null);
if (success) {
res.json({
code: 0,
msg: 'Reseted passwd'
});
} else {
res.json({
code: 500,
msg: 'unknow error'
});
}
};
}),
sendMsgCode: async (req, res) => {
// 可作为通用的发送验证码接口
let { phone, type } = req.body;
// 注意此处的type是字面值不是数值应该是例如'signIn'等
const exec = await Code.sendMsgCode(phone, type);
if (exec && exec.code === 0) {
res.json({
code: 0,
msg: 'Code sended'
});
} else {
res.json({
code: exec.code ? exec.code : 1,
error: exec.error ? exec.error : 'failed'
});
}
},
getLocaleSupport: async (req, res) => {
const System = global.Provider.getModule('System');
const locale = await System.getValue('locale');
if (!locale) return res.json({
code: 1,
error: "does't exists"
});
return res.json({
code: 0,
data: locale
});
}
};