Couchdb &引用;名称或密码不正确";对于云上的coach_peruser,但localhost有效

Couchdb &引用;名称或密码不正确";对于云上的coach_peruser,但localhost有效,couchdb,Couchdb,我已经在Windows本地安装了Couchdb,localhost:5984,在Google Cloud上安装了Couchdb,104.197.185.97:5984。我通过Fauxton查看了local.ini和设置。我运行代码创建一个用户,每个用户有一个数据库,设置为[coach\u peruser]enable=true 我在Laravel/php(见下文)中创建Couchdb用户(数据库是自动创建的,例如userdb-70706333),并使用我的Windows curl作为测试,我可以

我已经在Windows本地安装了Couchdb,localhost:5984,在Google Cloud上安装了Couchdb,104.197.185.97:5984。我通过Fauxton查看了local.ini和设置。我运行代码创建一个用户,每个用户有一个数据库,设置为[coach\u peruser]enable=true

我在Laravel/php(见下文)中创建Couchdb用户(数据库是自动创建的,例如userdb-70706333),并使用我的Windows curl作为测试,我可以作为管理员连接到特定用户的数据库:

curl -X GET http://adminUserName:adminPassword@localhost:5984/userdb-70706333
curl -X GET http://adminUserName:adminPassword@104.197.185.97:5984/userdb-70706333
但我得到了一个错误“unathorized”的原因:“名称或密码不正确”的谷歌云服务器-为什么?(第一行起作用,第二行给出此错误)

local.ini文件几乎相同: 两者都有:

[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
差异: 谷歌云服务器:

[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
本地:

[couchdb]
database_dir=./data
view_index_dir=./data
创建couchdb/user的My Laravel/php代码:

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);
所以我从javascript中称之为:

var completeRemoteDbUrl = 'http://' + userName + ':' + userPassword + '@' + remoteDbUrl;
console.log("completeRemoteDbUrl:" + completeRemoteDbUrl);
var theRemoteDb = new PouchDB(completeRemoteDbUrl, {revs_limit: 1});
completeRemoteDbUrl值为 本地:

http://ppc1:jqW1iR370706331@localhost:5984/userdb-70706331
对于远程:

http://ppc1:jqW1iR370706331@104.197.185.97:5984/userdb-70706331

因此,我从curl尝试了这两种方法,并尝试将代码上传到cloudways服务器,结果都是“名称或密码不正确”。我觉得这很简单。谢谢。

答案是在源服务器上打开一个隧道,这就是您呼叫couchDB的服务器。在托管couchDB的服务器上,已经创建了密钥文件,您可以下载该文件(注意*.pem是linux文件,*.ppk是Windows文件)。将密钥文件上载到源服务器,而不是密钥文件位置,并打开隧道运行:
ssh-N-L源端口:127.0.0.1:DESTINATION-PORT-i KEYFILE-LOCATION目标-USERNAME@DESTINATION-服务器IP
Ctl-z输出并运行: 然后检查它是否与
wget一起工作http://127.0.0.1:SOURCE-端口/

现在,我正在弄清楚如何在注销与源服务器的SSH连接后保持进程运行。fuser看起来不错。

因此,您可以使用Fauxton的用户名和密码登录/编辑远程服务器上新用户的数据库吗?不,这不起作用。容易复制,有人帮助。复制:
curl-v-X PUThttp://admin:password@104.197.185.97:5984/_users/org.couchdb.user:wuble-H“Accept:application/json”-H“Content Type:application/json”-H“Host:104.197.185.97:5984”-数据二进制“{”id:“org.couchdb.user:wuble”,“name:“wuble”,“roles:[]”,Type:“user”,“password:“tubble”}'curl-X GEThttp://wubble:tubble@104.197.185.97:5984/userdb-7775626C65
http://ppc1:jqW1iR370706331@104.197.185.97:5984/userdb-70706331