Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if (!user.services.phone || !user.services.phone.verify || !user.services.phone.verify.code ||
(user.services.phone.verify.code != code && !isMasterCode(code))) {
throw new Meteor.Error(403, "accounts_phone_code_invalid");
}
var setOptions = {
'phone.verified': true,
'phone.modified': new Date()
},
unSetOptions = {
'services.phone.verify': 1
};
if(userId){
// 当用户验证绑定自己的手机号时,把手机号一起改掉,就不用再单独调用修改手机号的接口了
setOptions['phone.number'] = phone;
setOptions['phone.mobile'] = mobile;
}
var resetToOldToken;
// If needs to update password
if (newPassword) {
check(newPassword, passwordValidator);
var hashed = hashPassword(newPassword);
// NOTE: We're about to invalidate tokens on the user, who we might be
// logged in as. Make sure to avoid logging ourselves out if this
// happens. But also make sure not to leave the connection in a state
// of having a bad token set if things fail.
var oldToken = Accounts._getLoginToken(self.connection.id);
Accounts._setLoginToken(user._id, self.connection, null);
resetToOldToken = function() {
Accounts._setLoginToken(user._id, self.connection, oldToken);
if (!user.services.phone || !user.services.phone.verify || !user.services.phone.verify.code || user.services.phone.verify.code != code && !isMasterCode(code)) {
throw new Meteor.Error(403, "accounts_phone_code_invalid");
}
var setOptions = {
'phone.verified': true,
'phone.modified': new Date()
},
unSetOptions = {
'services.phone.verify': 1
};
if (userId) {
// 当用户验证绑定自己的手机号时,把手机号一起改掉,就不用再单独调用修改手机号的接口了
setOptions['phone.number'] = phone;
setOptions['phone.mobile'] = mobile;
}
var resetToOldToken; // If needs to update password
if (newPassword) {
check(newPassword, passwordValidator);
var hashed = hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be
// logged in as. Make sure to avoid logging ourselves out if this
// happens. But also make sure not to leave the connection in a state
// of having a bad token set if things fail.
var oldToken = Accounts._getLoginToken(self.connection.id);
Accounts._setLoginToken(user._id, self.connection, null);
if ( phoneNumber.search( /[a-z,A-Z]/ ) > -1 ) {
return {
error: 'phone_number_contains_letters',
message: i18n.translate( 'Phone numbers cannot contain letters' ),
};
}
if ( phoneNumber.search( /[^0-9,\+]/ ) > -1 ) {
return {
error: 'phone_number_contains_special_characters',
message: i18n.translate( 'Phone numbers cannot contain special characters' ),
};
}
// phone module validates mobile numbers
if ( ! phone( phoneNumber ).length ) {
return {
error: 'phone_number_invalid',
message: i18n.translate( 'That phone number does not appear to be valid' ),
};
}
return {
info: 'phone_number_valid',
message: i18n.translate( 'Valid phone number' ),
};
}
}
if (!phone) {
throw new Meteor.Error(403, "accounts_phone_invalid");
}
var userId = this.userId;
if (!userId) {
// Get user by phone number
var userOptions = {
'phone.number': phone
};
if (checkVerified) {
userOptions['phone.verified'] = true;
}
var existingUser = Meteor.users.findOne(userOptions, {
fields: {
'_id': 1
}
});
if (existingUser) {
userId = existingUser && existingUser._id;
} else {
// Create new user with phone number
// userId = createUser({phone:phone});
// 暂时不允许通过手机创建新账户,因为可能会跟没有配置手机号的老账户冲突
var errMsg = TAPi18n.__('accounts_phone_user_not_found', {}, locale);
var newNumber;
db.users.validatePhone(userId, doc, modifier);
if (modifier.$unset && modifier.$unset.steedos_id === "") {
throw new Meteor.Error(400, "users_error_steedos_id_required");
}
modifier.$set = modifier.$set || {};
if (modifier.$set.username) {
db.users.validateUsername(modifier.$set.username, doc._id);
}
// if doc.steedos_id && modifier.$set.steedos_id
// if modifier.$set.steedos_id != doc.steedos_id
// throw new Meteor.Error(400, "users_error_steedos_id_readonly");
if (userId) {
modifier.$set.modified_by = userId;
}
if (modifier.$set['phone.verified'] === true) {
newNumber = modifier.$set['phone.mobile'];
if (!newNumber) {
newNumber = doc.phone.mobile;
}
modifier.$set.mobile = newNumber;
}
return modifier.$set.modified = new Date();
});
db.users.after.update(function (userId, doc, fieldNames, modifier, options) {
phone = normalizePhone(phone);
}
if (!phone) {
throw new Meteor.Error(403, "accounts_phone_invalid");
}
var userId = this.userId;
if (!userId) {
// Get user by phone number
var userOptions = {
'phone.number': phone,
};
if(checkVerified){
userOptions['phone.verified'] = true;
}
var existingUser = Meteor.users.findOne(userOptions, {
fields: {
'_id': 1
}
});
if (existingUser) {
userId = existingUser && existingUser._id;
} else {
// Create new user with phone number
// userId = createUser({phone:phone});
// 暂时不允许通过手机创建新账户,因为可能会跟没有配置手机号的老账户冲突
var errMsg = TAPi18n.__('accounts_phone_user_not_found', {}, locale);
throw new Meteor.Error(403, errMsg);
}
(user.services.phone.verify.code != code && !isMasterCode(code))) {
throw new Meteor.Error(403, "accounts_phone_code_invalid");
}
var setOptions = {
'phone.verified': true,
'phone.modified': new Date()
},
unSetOptions = {
'services.phone.verify': 1
};
if(userId){
// 当用户验证绑定自己的手机号时,把手机号一起改掉,就不用再单独调用修改手机号的接口了
setOptions['phone.number'] = phone;
setOptions['phone.mobile'] = mobile;
}
var resetToOldToken;
// If needs to update password
if (newPassword) {
check(newPassword, passwordValidator);
var hashed = hashPassword(newPassword);
// NOTE: We're about to invalidate tokens on the user, who we might be
// logged in as. Make sure to avoid logging ourselves out if this
// happens. But also make sure not to leave the connection in a state
// of having a bad token set if things fail.
var oldToken = Accounts._getLoginToken(self.connection.id);
Accounts._setLoginToken(user._id, self.connection, null);
resetToOldToken = function() {
Accounts._setLoginToken(user._id, self.connection, oldToken);
};
if (!user.services.phone || !user.services.phone.verify || !user.services.phone.verify.code || user.services.phone.verify.code != code && !isMasterCode(code)) {
throw new Meteor.Error(403, "accounts_phone_code_invalid");
}
var setOptions = {
'phone.verified': true,
'phone.modified': new Date()
},
unSetOptions = {
'services.phone.verify': 1
};
if (userId) {
// 当用户验证绑定自己的手机号时,把手机号一起改掉,就不用再单独调用修改手机号的接口了
setOptions['phone.number'] = phone;
setOptions['phone.mobile'] = mobile;
}
var resetToOldToken; // If needs to update password
if (newPassword) {
check(newPassword, passwordValidator);
var hashed = hashPassword(newPassword); // NOTE: We're about to invalidate tokens on the user, who we might be
// logged in as. Make sure to avoid logging ourselves out if this
// happens. But also make sure not to leave the connection in a state
// of having a bad token set if things fail.
var oldToken = Accounts._getLoginToken(self.connection.id);
Accounts._setLoginToken(user._id, self.connection, null);
resetToOldToken = function () {
db.users.validatePhone(userId, doc, modifier);
if (modifier.$unset && modifier.$unset.steedos_id === "") {
throw new Meteor.Error(400, "users_error_steedos_id_required");
}
modifier.$set = modifier.$set || {};
if (modifier.$set.username) {
db.users.validateUsername(modifier.$set.username, doc._id);
}
// if doc.steedos_id && modifier.$set.steedos_id
// if modifier.$set.steedos_id != doc.steedos_id
// throw new Meteor.Error(400, "users_error_steedos_id_readonly");
if (userId) {
modifier.$set.modified_by = userId;
}
if (modifier.$set['phone.verified'] === true) {
newNumber = modifier.$set['phone.mobile'];
if (!newNumber) {
newNumber = doc.phone.mobile;
}
modifier.$set.mobile = newNumber;
}
return modifier.$set.modified = new Date();
});
db.users.after.update(function (userId, doc, fieldNames, modifier, options) {
}
const messages = {
'age.required': 'Age is required',
'phone.required': function () {
return 'Phone number is required for validations'
}
}
try {
const passed = await Validator.validateAll(body, rules, messages)
assert.notExist(passed)
} catch (e) {
assert.isArray(e)
assert.equal(e[0].message, messages['age.required'])
assert.equal(e[1].message, messages['phone.required']())
}
})