Моя система - Ubuntu 10.04, и у меня установлена CouchDB 1.0. Я могу создать администратора или несколько администраторов, войти в систему как администратор, и все работает отлично.
Начиная с 0.11 в CouchDB, существует понятие пользователей, которые не являются администраторами и могут иметь детальные права на базы данных. Я хочу создать такого пользователя. Я открываю Futon, я не вошел в систему и нажимаю ссылку «Регистрация» (нижний правый угол). Тогда возникает вопрос об имени пользователя и пароле. Когда я заполняю форму и отправляю ее, в поле «Имя пользователя» появляется очень длинное сообщение об ошибке:
Ошибка регистрации: {gen_server, call, [couch_query_servers, {get_proc, {doc, << "_ design / _auth" >>, {1, [<< 84,165,145,147,156,145,146,42,53,239,238,7, 235,44,58,114> >]}, {[{<< "language" >>, << "javascript" >>}, {<< "validate_doc_update" >>, << "\ n функция (newDoc, oldDoc, userCtx) {\ n если ((oldDoc && oldDoc.type! == 'пользователь') || newDoc.type! == 'пользователь') {\ n throw ({запрещено: 'doc.type должен быть пользователем'}); \ n} // на данный момент мы разрешаем только пользовательские документы \ n \ n if (newDoc._deleted === true) {\ n // разрешаем удаление администраторами и сопоставление пользователей \ n // без проверки других полей \ n if ((userCtx.roles .indexOf ('_ admin')! == -1) || \ n (userCtx.name == oldDoc.name)) {\ n return; \ n} else {\ n throw ({запрещено: 'Удалить могут только администраторы) документы других пользователей. '}); \ n} \ n} \ n \ n if (! newDoc.name) {\ n throw ({запрещено:' требуется doc.name '}); \ n} \ n \ n if (! (newDoc.roles && (typeof newDoc.roles.length! == 'undefined'))) {\ n throw ({запрещено: 'doc.roles должен быть массивом'}); \ n} \ n \ n if (newDoc._id! == ('org.couchdb.user:' + newDoc.name)) {\ n throw ({\ n запрещено: 'ID документа должен иметь форму org.couchdb.user: name' \ n}); \ n} \ n \ n if (oldDoc) {// проверить все обновления \ n if (oldDoc) .name! == newDoc.name) {\ n throw ({запрещено: 'имена пользователей не могут быть изменены.'}); \ n} \ n} \ n \ n if (newDoc.password_sha &&! newDoc.salt) { \ n throw ({\ n запрещено: 'Пользователи с паролем_sha должны иметь соль.' + \ n 'См. /_utils/script/couch.js для примера кода.' \ n}); \ n} \ n \ n, если (userCtx.roles.indexOf ('_ admin') === -1) {\ n if (oldDoc) {// проверка обновлений без прав администратора \ n if (userCtx.name! == newDoc.name) {\ n throw ({\ n запрещено: 'Вы можете обновлять только свой собственный пользовательский документ.' \ n}); \ n} \ n // проверять обновления ролей \ n var oldRoles = oldDoc.roles.sort (); \ n var newRoles = newDoc.roles.sort (); \ n \ n if (oldRoles.length! == newRoles.length) {\ n throw ({запрещено: «Только _admin может редактировать роли»}); \ n} \ n \ n для (var i = 0; я <oldRoles.length; i ++) {\ n if (oldRoles [i]! == newRoles [i]) {\ n throw ({запрещено: 'Только _admin может редактировать роли'}); \ n} \ n} \ n} иначе if (newDoc .roles.length> 0) {\ n throw ({запрещено: 'Только администратор может устанавливать роли'}); \ n} \ n} \ n \ n // нет системных ролей в пользователях db \ n для ( var i = 0; i ') {\ n throw ({\ n запрещено: \ n 'Нет системных ролей (начинающихся с подчеркивания) в пользователях db.' \ N}); \ n} \ n} \ n \ n // нет имен систем как имен \ n if (newDoc.name [0] === ' _ ') {\ n throw ({запрещено:' Имя пользователя не может начинаться с подчеркивания. '}); \ n} \ n} \ n ">>}]}, [], false, []}, {<< "_design / _auth" >>, << "1-54a591939c91922a35efee07eb2c3a72" >>}}]}
Что это? Как я могу создавать пользователей в CouchDB?