init
This commit is contained in:
204
src/modules/sign/sign.controller.js
Normal file
204
src/modules/sign/sign.controller.js
Normal 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
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user