5.9 KiB
5.9 KiB
id | title | challengeType | videoUrl | localeTitle |
---|---|---|---|---|
5895f70cf9fc0f352b528e66 | Serialization of a User Object | 2 | Сериализация пользовательского объекта |
Description
passport.serializeUser( OURFUNCTION )
и passport.deserializeUser( OURFUNCTION )
. Сериализуемый вызов вызывается с двумя аргументами, полным пользовательским объектом и обратным вызовом, используемым паспортом. Возвращенный в обратном вызове должен быть уникальным ключом для идентификации этого пользователя - самым простым из них является использование пользователями _id в объекте, поскольку оно должно быть уникальным по мере его создания MongoDb. Аналогичным образом десериализуется вызов с этим ключом и функцией обратного вызова для паспорта, но на этот раз нам нужно взять этот ключ и вернуть полный объект пользователей на обратный вызов. Чтобы выполнить поиск по запросу Mongo _id, вам нужно будет создать const ObjectID = require('mongodb').ObjectID;
, а затем для его использования вы вызываете new ObjectID(THE_ID)
. Обязательно добавьте MongoDB в качестве зависимости. Вы можете увидеть это в следующих примерах: passport.serializeUser ((пользователь, сделано) => { done (null, user._id); });
passport.deserializeUser ((id, done) => { db.collection ( 'пользователи'). findOne ( {_id: новый ObjectID (id)}, (err, doc) => { done (null, doc); } ); });ПРИМЕЧАНИЕ. Этот deserializeUser выдает ошибку до тех пор, пока мы не настроим БД на следующем шаге, поэтому закомментируем весь блок и просто
done(null, null)
вызов done(null, null)
в функции deserializeUser. Представьте свою страницу, когда вы думаете, что у вас все в порядке. Instructions
Tests
tests:
- text: Сериализация функции пользователя
testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js") .then(data => { assert.match(data, /passport.serializeUser/gi, "You should have created your passport.serializeUser function"); assert.match(data, /null, user._id/gi, "There should be a callback in your serializeUser with (null, user._id)"); }, xhr => { throw new Error(xhr.statusText); })'
- text: Отключить функцию пользователя
testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js") .then(data => { assert.match(data, /passport.deserializeUser/gi, "You should have created your passport.deserializeUser function"); assert.match(data, /null,( |)null/gi, "There should be a callback in your deserializeUser with (null, null) for now"); }, xhr => { throw new Error(xhr.statusText); })'
- text: MongoDB - зависимость
testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/package.json") .then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, "mongodb", "Your project should list "mongodb" as a dependency"); }, xhr => { throw new Error(xhr.statusText); })'
- text: 'Требуется Mongodb, включая ObjectId'
testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js") .then(data => { assert.match(data, /require.*("|")mongodb("|")/gi, "You should have required mongodb"); assert.match(data, /new ObjectID.*id/gi, "Even though the block is commented out, you should use new ObjectID(id) for when we add the database"); }, xhr => { throw new Error(xhr.statusText); })'
Challenge Seed
Solution
// solution required