Ошибка создания пользователя в CouchDB 1.0 - PullRequest
5 голосов
/ 11 августа 2010

Моя система - 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?

Ответы [ 4 ]

5 голосов
/ 25 октября 2010

Чтобы создать пользователя, поместите документ JSON в http://localhost:5984/_users/org.couchdb.user:<username>

Например, создать файл login.json, например:

{
    "_id": "org.couchdb.user:test",
    "name": "test",
    "password_sha": "24e8e07c23d8ae85108468ec4814b2f0fa84edde",
    "salt": "78f67e252351a56d6e1e6df9ba005239",
    "roles": [],
    "type": "user"
}

Затем поместите данные в couchdb:

curl -X PUT http://<admin>:<password>@localhost:5984/_users/org.couchdb.user%3Atest -S -s -H "Content-Type: application/json" -d @login.json

(Замените <admin> и <password> своими учетными данными couchdb.)

Теперь у вас должна быть возможность войти в couchdb с пользователем «test» и паролем «test123».

2 голосов
/ 17 марта 2011

У меня была похожая ошибка на Debian.Я скомпилировал CouchDB из репозитория build-couchdb.Я мог бы создавать пользователей-администраторов, но не обычных пользователей.Я также не смог запустить временные просмотры.Решил это, очистив libmozjs1d и erlang-nox и перекомпилировав.надеюсь, что это поможет.

1 голос
/ 14 апреля 2018

Сам столкнулся с этой проблемой и обнаружил, что это связано с тем, что мои name и часть имени строки _id не совпадают:

curl -X PUT https://admin:password@server:6984/_users/org.couchdb.user:dan \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{"name": "Dan", "password": "password", "roles": [], "type": "user"}'

это не работает, потому что часть имени _id дан от org.couchdb.user: дан не соответствует name предоставленному Dan .

Следующее работает, потому что имя пользователя совпадает (теперь оба даны)

curl -X PUT https://admin:password@server:6984/_users/org.couchdb.user:Dan \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d '{"name": "Dan", "password": "password", "roles": [], "type": "user"}'
1 голос
/ 11 августа 2010

Похоже, у вас уже есть учетная запись администратора в системе, которую CouchDB обнаруживает и ожидает, что вы войдете в систему для создания учетных записей. Проверьте свой конфигурационный файл local.ini, чтобы увидеть, есть ли у вас какие-либо администраторы, определенные в разделе [admins] - у вас, вероятно, будут определенные, если вы обновляете со старой установки.

Войдите в систему как один из этих администраторов или измените их пароль, если вы его не помните (просто замените значение hasf вашим открытым текстом, и он будет хеширован при следующем запуске CouchDB). Теперь перезапустите CouchDB. Если у вас была учетная запись администратора, войдите в систему под этим пользователем или, если вы удалили все старые учетные записи, нажмите «Зарегистрироваться», чтобы создать новую.

Приветствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...