Android Couchbase SyncGateway Cookie

Android Couchbase SyncGateway Cookie

萨拉姆
我这样做是为了在 android 项目中启用 cookie,但在同步网关日志中 return :

401 login required

session_id("6e2b5106712c0aa3e0048c5b724b302df63d5fbf") 有效期为20年<br> couchbase 服务器在另一台本地 pc(192.168.137.137)

    try {
        syncUrl = new URL("http://192.168.137.137:4984/test");
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    }

    boolean isSecure = false;
    boolean httpOnly = false;


    Replication pullReplication = database.createPullReplication(syncUrl);
    pullReplication.setContinuous(true);
    pullReplication.setCookie("SyncGatewaySession",
            "6e2b5106712c0aa3e0048c5b724b302df63d5fbf",
            null, 4125798350463L, isSecure, httpOnly);  

    Replication pushReplication = database.createPushReplication(syncUrl);
    pushReplication.setContinuous(true);
    pushReplication.setCookie("SyncGatewaySession",
            "6e2b5106712c0aa3e0048c5b724b302df63d5fbf",
            null, 4125798350463L, isSecure, httpOnly);

    pullReplication.start();
    pushReplication.start();

    pullReplication.addChangeListener(this);
    pushReplication.addChangeListener(this);

问题已解决:

try {
    syncUrl = new URL("http://192.168.137.137:4984/test");
} catch (MalformedURLException e) {
    throw new RuntimeException(e);
}

Replication pullReplication = database.createPullReplication(syncUrl);
pullReplication.setContinuous(true);

Replication pushReplication = database.createPushReplication(syncUrl);
pushReplication.setContinuous(true);

Authenticator auth = new BasicAuthenticator(username, password);
pushReplication.setAuthenticator(auth);
pullReplication.setAuthenticator(auth);

pullReplication.start();
pushReplication.start();

pullReplication.addChangeListener(this);
pushReplication.addChangeListener(this);

如果您想使用 cookie 中提供的会话 ID,您可以这样做:

http://developer.couchbase.com/documentation/mobile/1.3/develop/guides/authentication/custom-authentication/index.html

Map<String, String> session = new HashMap<String, String>();
session.put("session_id", "904ac010862f37c8dd99015a33ab5a3565fd8447");
session.put("expires", "2015-09-23T17:27:17.555065803+01:00");
session.put("cookie_name", "SyncGatewaySession");

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = null;
try {
    date = formatter.parse(session.get("expires"));
} catch (ParseException e) {
    e.printStackTrace();
}

Replication pull = database.createPullReplication(syncGatewayURL);
pull.setCookie(session.get("cookie_name"), session.get("session_id"), "/", date, false, false);
pull.start();