2010-08-11 6 views
4

Mon système est ubuntu 10.04 et CouchDB 1.0 est installé. Je peux créer un admin, ou plus d'administrateurs, connectez-vous en tant qu'administrateur et tout fonctionne bien.Erreur lors de la création de l'utilisateur dans CouchDB 1.0

Depuis 0.11 dans CouchDB il y a la notion d'utilisateurs qui ne sont pas des admins, et peuvent avoir des droits à grain fin aux bases de données. Je veux créer un tel utilisateur. J'ouvre Futon, je ne suis pas connecté, et je clique sur le lien "Inscription" (coin inférieur droit). Ensuite, il y a une question sur le nom d'utilisateur et mot de passe. Quand je remplir le formulaire et le soumettre, il y a très long message d'erreur dans "Nom d'utilisateur" champ:

error Inscription: {gen_server, appel, [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 >>]}, {[{< < "langue" >>, < < "javascript" >>}, {< < "validate_doc_update" >>, < < « fonction \ n (newdoc, oldDoc, userCtx) {\ n if ((oldDoc & & oldDoc.type! == 'utilisateur') || newDoc.type! == 'utilisateur') {\ n throw ({interdit: 'doc.type doit être un utilisateur'}); \ n} // nous n'autorisons que l'utilisateur doc s pour le moment \ n \ n if (newDoc._deleted === true) {\ n // autoriser les suppressions par les administrateurs et les utilisateurs correspondants \ n // sans vérifier les autres champs \ n if ((userCtx.roles.indexOf (' _admin ')! == -1) || \ n (userCtx.name == ancienDoc.name)) {\ n return; \ n} else {\ n throw ({interdit:' Seuls les administrateurs peuvent supprimer d'autres documents utilisateur. '}); \ n} \ n \ n \ n if (! newDoc.name) {\ n throw ({interdit:' doc.name est requis '}); \ n} \ n \ n if (! newDoc.roles & & (typeof nouveauDoc.roles.length! == 'undefined'))) {\ n throw ({interdit: 'doc.roles doit être un tableau'}); \ n} \ n \ n if (newDoc._id! == ('org.couchdb.user:' + nouveauDoc.name)) {\ n throw ({\ n interdit: 'Doc ID doit être de la forme org.couchdb.user: nom' \ n}); \ n} \ n \ n if (oldDoc) {// valider toutes les mises à jour \ n if (oldDoc.name! == newDoc.name) {\ n throw ({interdit: 'Les noms d'utilisateur ne peuvent pas être changés.'}); \ n} \ n} \ n \ n if (newDoc.password_sha & &! newDoc.salt) {\ n throw ({\ n interdit: 'Les utilisateurs avec password_sha doivent avoir un salt.' + \ N 'Voir /_utils/script/couch.js pour le code exemple.' \ N}); \ n} \ n \ n if (userCtx.roles.indexOf ('_ admin ') === -1) {\ n if (oldDoc) {// valider les mises à jour non-admin \ n if (userCtx.name! == nouveauDoc.name) {\ n throw ({\ n interdit:' Vous pouvez mettez à jour votre propre document utilisateur uniquement. '\ n}); \ n} \ n // valider les mises à jour des rôles \ nvar oldRoles = oldDoc.roles.sort(); \ n var newRoles = newDoc.roles.sort(); n \ n if (oldRoles.length! == newRoles.length) {\ n throw ({interdit: 'Seul _admin peut modifier les rôles'}); \ n} \ n \ n pour (var i = 0; i < oldRoles.length; i ++) {\ n if (oldRoles [i]! == newRoles [i]) {\ n throw ({interdit: 'Seul _admin peut modifier les rôles}}); \ n} \ n} \ n} else if (newDoc .roles.length> 0) {\ n throw ({interdit: 'Seulement admin peut définir les rôles'}); \ n} \ n} \ n \ n // aucun rôle système dans les utilisateurs db \ n pour (var i = 0; i < newDoc.roles.length; i ++) {\ n if (nouveauDoc.roles [i] [0] === '') {\ n throw ({\ n interdit: \ n 'Aucun rôle système (commençant par un trait de soulignement) dans les utilisateurs db. '\ n}); \ n} \ n} \ n \ n // aucun nom de système comme nom \ n if (nouveauDoc.name [0] ===' _ ') { \ n throw ({interdit: 'Nom d'utilisateur ne peut pas commencer par un trait de soulignement.'}); \ n} \ n} \ n ">>}]}, [], false, []}, {< <" _design/_auth « >>, < < "1-54a591939c91922a35efee07eb2c3a72" >>}}]}

Qu'est-ce? Comment puis-je créer des utilisateurs dans CouchDB?

Répondre

1

Il semblerait que vous ayez déjà un compte d'administrateur sur le système, que CouchDB détecte et que vous vous attendiez à être connecté pour créer des comptes. Vérifiez votre fichier de configuration local.ini pour voir si vous avez des administrateurs définis dans la section [admins] - vous en aurez probablement défini si vous effectuez une mise à niveau depuis une ancienne installation.

Connectez-vous en tant que l'un de ces administrateurs, ou changez leur mot de passe si vous ne vous en souvenez pas (remplacez simplement le has par votre mot de passe en clair et il sera haché la prochaine fois que CouchDB démarre).Redémarrez maintenant CouchDB. Si vous possédez un compte administrateur, connectez-vous en tant qu'utilisateur, ou si vous avez supprimé tous les anciens comptes, cliquez sur S'inscrire pour en créer un nouveau.

Cheers.

+1

Oui, j'ai un compte administrateur. Lorsque je suis connecté en tant qu'administrateur, il n'y a pas de lien "Inscription". Si je supprime le compte admin, il n'y a pas de lien "Inscription" (seulement celui que vous pouvez utiliser pour créer un compte administrateur). Quand il y a un compte administrateur, mais je ne suis pas connecté et cliquez sur "Inscription" - l'erreur décrite se produit. Cela fonctionne dans Windows. Le problème est seulement sur Ubuntu, donc je suspecte certains droits sur certains fichiers. – amorfis

5

Pour créer un utilisateur, mettez un document JSON http://localhost:5984/_users/org.couchdb.user:<username>

Par exemple créer un fichier login.json comme ceci:

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

Ensuite, placez les données dans CouchDB:

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

(Remplacez <admin> et <password> par vos informations d'identification couchdb.)

Vous devriez maintenant pouvoir vous connecter à couchdb avec l'utilisateur "test" et le mot de passe "test123".

2

J'ai eu une erreur similaire sur debian. J'ai compilé CouchDB à partir du repo de build-couchdb. Je pourrais créer des utilisateurs admin mais pas des utilisateurs réguliers. Je n'étais également pas capable d'exécuter des vues temporaires. Résolu en purgeant libmozjs1d et erlang-nox et en recompilant. J'espère que cela pourra aider.

Questions connexes