I have Couchdb installed locally on Windows, localhost:5984 and on Google Cloud, 104.197.185.97:5984. I reviewed the local.ini and also settings via Fauxton. I run code to create a user with one database per user, the setting is [couch_peruser] enable = true.
I create the Couchdb user (and the database is automatically created, for example userdb-70706333) in Laravel/php (see below) and using my Windows curl here as a test, I can connect to the specific user's database as an admin:
curl -X GET http://adminUserName:adminPassword@localhost:5984/userdb-70706333
curl -X GET http://adminUserName:[email protected]:5984/userdb-70706333
Yet I get an error "unathorized" reason: "Name or password is incorrect" for Google cloud server - why? (First line works, second line gives this error)
curl -X GET http://userName:userPassword@localhost:5984/userdb-70706333
curl -X GET http://userName:[email protected]:5984/userdb-70706333
The local.ini files are almost identical: Both have:
[couch_peruser]
delete_dbs = true
enable = true
[chttpd]
port=5984
bind_address=0.0.0.0
require_valid_user=true
authentication_handlers =
WWW-Authenticate=Basic realm="Administrator"
enable_cors = true
authentication_handlers = {couch_httpd_auth, cookie_authentication_handler}, {couch_httpd_auth, proxy_authentication_handler}, {couch_httpd_auth, default_authentication_handler}
[couch_httpd_auth]
require_valid_user=true
allow_persistent_cookies = true
proxy_use_secret =
timeout = 6000
[ssl]
port=6984
[cors]
origins = *
credentials = true
methods = GET, PUT, POST, HEAD, DELETE
headers = accept, authorization, content-type, origin, referer
Differences: Google cloud server:
[couchdb]
database_dir=/opt/bitnami/couchdb/var/lib/couchdb
view_index_dir=/opt/bitnami/couchdb/var/lib/couchdb
plugin_dir=/opt/bitnami/couchdb/lib/couchdb/plugins
Local:
[couchdb]
database_dir=./data
view_index_dir=./data
My Laravel/php code to create the couchdb/user:
curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
$data_array = array(
"name" => (string)($user_name),
"password" => (string)($user_password),
"roles" => ["users"],
"type" => (string)("user")
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$url = 'http://' . $admin_user_name . ':' . $admin_user_password . '@'.$remoteDbIP.'/_users/org.couchdb.user:' . $user_name;
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Accept: application/json',
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_exec($curl);
So I call this from javascript:
var completeRemoteDbUrl = 'http://' + userName + ':' + userPassword + '@' + remoteDbUrl;
console.log("completeRemoteDbUrl:" + completeRemoteDbUrl);
var theRemoteDb = new PouchDB(completeRemoteDbUrl, {revs_limit: 1});
completeRemoteDbUrl value is For local:
http://ppc1:jqW1iR370706331@localhost:5984/userdb-70706331
For remote:
http://ppc1:[email protected]:5984/userdb-70706331
So I tried both from curl and tried uploading the code to my cloudways server and both give me the same result "Name or password is incorrect". Got a feeling it is something simple. Thanks.
curl -v -X PUT http://admin:[email protected]:5984/_users/org.couchdb.user:wubble -H "Accept: application/json" -H "Content-Type:application/json" -H "Host: 104.197.185.97:5984" --data-binary '{"_id":"org.couchdb.user:wubble","name":"wubble","roles":[],"type":"user","password":"tubble"}' curl -X GET http://wubble:[email protected]:5984/userdb-777562626c65
– J Chadwick