2016-10-03 2 views
2

Я хотел бы расширить модуль (или создать свой собственный), чтобы автоматически добавлять пользователей в Apostrophe (коллекция aposUsersSafe).Авто добавить пользователей в Apostrophe

Я не вижу встроенного метода в модуле apostrophe-users для этого, и я ищу некоторые рекомендации относительно того, как он может быть реализован? Благодаря!

ответ

2

Как уже упоминалось ранее, я являюсь главным архитектором Апострофа на Пунк-авеню.

Коллекция aposUsersSafe предназначена для хранения хэшей паролей и денормализованных копий нескольких близких свойств. Обычно вам не нужно напрямую взаимодействовать с ним. Как и все другие документы в Apostrophe, пользователи живут в коллекции aposDocs. И лучше всего взаимодействовать с ними с помощью методов, предоставляемых модулем, который управляет этим типом детали. В этом случае это будет apos.users (модуль apostrophe-users).

Ознакомьтесь с этим методом; это легко реорганизуется из метода addFromTaskapostrophe-users, который реализует добавление пользователя, а также добавляет их в группу, что вы, наверняка, тоже захотите сделать.

Здесь нет кода для хеш-пароля, потому что метод insertapos.users сделает это за нас.

self.addUser = function(req, username, password, groupname, callback) { 
    // find the group 
    return self.apos.groups.find(req, { title: groupname }).permission(false).toObject(function(err, group) { 
    if (err) { 
     return callback(err); 
    } 
    if (!group) { 
     return callback('That group does not exist.'); 
    } 
    return self.apos.users.insert(req, { 
     username: username, 
     password: password, 
     title: username, 
     firstName: username, 
     groupIds: [ group._id ] 
    }, { permissions: false }, callback); 
    }); 
}; 

permission(false) вызывается курсором и опции из объекта с { permissions: false } передается вставить, потому что я предполагаю, что вы хотите, чтобы это произошло в этот момент, независимо от того, кто запускает его.

Я рекомендую reading this tutorial on Apostrophe's model layer, чтобы получить прочное заземление в том, как работать с типами контента Apostrophe, не попадая в неприятности. Вы можете использовать MongoDB напрямую, но вы должны знать, когда делать это, а когда нет.

При введении пользователя вы можете передать больше свойств; это всего лишь минимальный минимум для разумного поведения.

Что касается вызова метода, если бы вы добавить его в lib/modules/apostrophe-users/index.js на уровне проекта в construct, то вы могли бы назвать это как это от промежуточного слоя:

return self.apos.users.addUser(req, username, password, groupname, function(err, newUser) { 
    if (err) { 
    // Handle the error as you see fit, one way is a 403 forbidden response 
    res.statusCode = 403; 
    return res.send('forbidden'); 
    } 
    // newUser is the new user. You could log them in and redirect, 
    // with code I gave you elsewhere, or continue request: 
    return next(); 
}); 

Надежда это полезно!

+0

Спасибо. Это определенно полезно. Если я понимаю ваше предложение, я бы добавил self.AddUser для создания в моем модуле lib \ modules \ apostrophe-users. Затем я хочу вызвать этот метод из проверки, которую я выполняю в модуле apostrophe-express: 'middleware: [ function (req, res, next) { const email = // from cookie const auth = // from cookie if (email && auth) { // как я могу вызвать addUser здесь? //apostrophe-users.addUser(req, email, '', 'admin', null) } } ' Не знаете, как вызвать? –

+0

Глядя на другой ответ, который вы указали в автоответчике (модуль демо-аутологи), вы используете метод self.pageBeforeSend. Я думал, что это будет выполняться только по совпадающим маршрутам, но похоже, что это выполняется по каждому запросу благодаря модулю, определенному в app.js. По моему мнению, этот метод self.pageBeforeSend может использоваться для выполнения любого кода, который я хочу использовать для любого запроса страницы, - доступа к объектам запроса и апоса.Если это не способ выполнить код для каждого запроса, можете ли вы указать мне лучший подход? –

+0

Если вы добавите этот метод к apostrophe-users/index.js, как вы предлагаете, вы должны вызвать его так же из функции промежуточного программного обеспечения в другом модуле: return self.apos.users.addUser (req, имя пользователя, пароль, groupname, function (err, newUser) { if (err) { // Обращайтесь с ошибкой так, как вы считаете нужным, один из способов - это запрещенный ответ 403 res.statusCode = 403; return res.send ('forbidden') } // newUser - новый пользователь. Вы можете зарегистрировать их и перенаправить, // с кодом, который я вам предоставил в другом месте, или продолжить запрос: return next(); }); –