Сегодня я устранял множество пользовательских ошибок, используя Meteor.js и пакет Accounts-ui-bootstrap3. До сих пор моей любимой ошибкой является «Срок действия токена» при сбросе пароля, но проблема, которая действительно вызывает проблемы, — «Пользователь не найден» при вводе правильного адреса электронной почты. Это заняло некоторое время, но проблема в том, вызвано учетными записями, созданными с адресом электронной почты, написанным заглавными буквами. Очевидно, учетные записи чувствительны к регистру для адресов электронной почты.
Теперь, хотя с тех пор я обновил весь свой код для входящих электронных писем пользователей в нижнем регистре, мне все еще нужно исправить существующих пользователей. Я создал метод сервера, чтобы справиться с этим:
Meteor.methods({
sanitizeEmails: function() {
Meteor.users.find({
'emails.address': /[A-Z]{1,}/
}).map(function(user) {
console.log(user.emails[0].address);
Meteor.users.update({
_id: user._id
}, {
$set: {
'emails.0.address': user.emails[0].address.toLowerCase()
}
});
});
}
});
Который должен пройти, найти любые имена с буквой в верхнем регистре и обновить адрес электронной почты до версии в нижнем регистре. Это не работает, выдает ошибку индекса в драйвере MongoDB:
I20150904-01:30:23.322(-7)? Exception while invoking method 'normalizeEmails' MongoError: E11000 duplicate key error index: meteor.users.$emails.address_1 dup key: { : "[email protected]" }
I20150904-01:30:23.322(-7)? at Object.Future.wait (/home/mowgli/.meteor/packages/meteor-tool/.1.1.4.70jrul++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:398:15)
I20150904-01:30:23.323(-7)? at [object Object].<anonymous> (packages/meteor/helpers.js:119:1)
I20150904-01:30:23.323(-7)? at [object Object].MongoConnection.(anonymous function) [as update] (packages/mongo/mongo_driver.js:678:1)
I20150904-01:30:23.323(-7)? at [object Object].Mongo.Collection.(anonymous function) [as update] (packages/mongo/collection.js:575:1)
I20150904-01:30:23.323(-7)? at server/main.invitePub.coffee:320:22
I20150904-01:30:23.323(-7)? at packages/mongo/mongo_driver.js:974:1
I20150904-01:30:23.323(-7)? at [object Object]._.extend.forEach (packages/mongo/mongo_driver.js:965:1)
I20150904-01:30:23.323(-7)? at [object Object]._.extend.map (packages/mongo/mongo_driver.js:973:1)
I20150904-01:30:23.323(-7)? at [object Object].Cursor.(anonymous function) [as map] (packages/mongo/mongo_driver.js:812:1)
I20150904-01:30:23.324(-7)? at [object Object].Meteor.methods.normalizeEmails (server/main.invites.coffee:317:56)
I20150904-01:30:23.324(-7)? - - - - -
I20150904-01:30:23.324(-7)? at Object.toError (/home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/utils.js:114:11)
I20150904-01:30:23.324(-7)? at /home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/collection/core.js:577:27
I20150904-01:30:23.324(-7)? at /home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/db.js:1195:7
I20150904-01:30:23.324(-7)? at /home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/db.js:1903:9
I20150904-01:30:23.324(-7)? at Server.Base._callHandler (/home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/base.js:453:41)
I20150904-01:30:23.324(-7)? at /home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/server.js:487:18
I20150904-01:30:23.324(-7)? at [object Object].MongoReply.parseBody (/home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
I20150904-01:30:23.325(-7)? at [object Object].<anonymous> (/home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/server.js:445:20)
I20150904-01:30:23.325(-7)? at [object Object].emit (events.js:95:17)
I20150904-01:30:23.325(-7)? at [object Object].<anonymous> (/home/mowgli/.meteor/packages/mongo/.1.1.0.zb7oxo++os+web.browser+web.cordova/npm/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:207:13)
РЕДАКТИРОВАТЬ:
По-видимому, у меня есть повторяющиеся электронные письма, поэтому электронные письма Accounts-UI чувствительны к регистру. Вполне возможно получить трех пользователей [email protected], [email protected] и [email protected].
Я оставлю это как поучительную историю и простой пример обновления адресов электронной почты в Meteor.