如何在CouchDB中创建一个带有用户名和密码的数据库

4
我正在创建一个将数据存储在CouchDB中的Android应用程序,我需要从Android应用程序创建数据库。我需要使用Java方法执行命令“curl-X PUT http://user:passwd@127.0.0.1:5984/myDataBase”。
我已经实现了以下函数:
public static boolean createDatabase(String hostUrl, String databaseName) {
    try {
        HttpPut httpPutRequest = new HttpPut(hostUrl + databaseName);
        JSONObject jsonResult = sendCouchRequest(httpPutRequest);

        return jsonResult.getBoolean("ok");
    } 
    catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

private static JSONObject sendCouchRequest(HttpUriRequest request) {
    try {
        HttpResponse httpResponse = (HttpResponse) new DefaultHttpClient().execute(request);
        HttpEntity entity = httpResponse.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            String resultString = convertStreamToString(instream);
            instream.close();
            JSONObject jsonResult = new JSONObject(resultString);

            return jsonResult;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

我通过以下方式调用函数:

createDatabase("http://user:passwd@127.0.0.1/","myDataBase");

但是没有结果。我认为问题在于用户名和密码,因为在“管理员模式”下,通过以下方式调用该函数可以正常工作:
createDatabase("http://127.0.0.1/","myDataBase");

不太熟悉Android应用程序环境,但为了谨慎起见,您是否尝试从终端运行实际的curl命令,以确保您使用的user:passwd是正确的? - rossdavidh
2个回答

4

我有同样的问题 -> 你需要在标头中使用HTTP身份验证。所以只需将以下标头行添加到您的请求中:

private static void setHeader(HttpRequestBase request)  {
    request.setHeader("Accept", "application/json");
    request.setHeader("Content-type", "application/json");
    request.setHeader("Authorization", "Basic base64(username:password)");
}

请记住,您需要使用base64对“用户名:密码”这个短语进行编码。 看起来应该是这样的:

request.setHeader("Authorization", "Basic 39jdlf9udflkjJKDKeuoijdfoier");

0
你可以看一下 libcouch-android 博客帖子,它有一些很好的功能,真正支持 Android 开发使用 CouchDB。例如自动为应用程序创建数据库和密码,因此用户可以透明地使用 CouchDB(如果需要)。
此外,它提供访问 CouchDB 的 RPC 方法,因此您可以从应用程序的生命周期启动和停止 DB。
关于安全性,我在这个主题里进行了总结。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接