PouchDB同步授权?

9
如何确保当前用户有权限通过PouchDB访问CouchDB数据库?通过我的实验,使用CouchDB数据库名称调用new PouchDB()方法可以授权您访问该数据。在Futon中将require_valid_user设置为true似乎有效,但在通过POST /_session验证用户后,Futon模态窗口仍然弹出。我想要一个标准的登录界面(用户名和密码),将用户登录到我的应用程序并授权访问正确的CouchDB数据库(通过PouchDB)。我该如何做?非常感谢你能提供任何帮助。

您可能想查看此插件 https://github.com/nolanlawson/pouchdb-authentication - twilson63
2个回答

9
有一个由Nolan Lawson开发的PouchDB插件,为PouchDb提供了身份验证API:
var db = new PouchDB('http://mysite:5984/mydb');
db.login('batman', 'brucewayne').then(function (batman) {
  console.log("I'm Batman.");
  return db.logout();
});

这里是它混合的方法:
  • 注册
  • 登录
  • 注销
  • getSession
  • getUser
为了防止古老时代的浏览器HTTP基本身份验证模态对话框,我们必须在使用PouchDB的方式上进行微调。为了防止未经授权的请求发送到CouchDB(用于检查远程数据库是否存在),请在Pouch的构造函数选项中传递skipSetup:true。其次,为了对请求进行身份验证_session,请在db.login()的AJAX选项中添加HTTP基本授权标头。
var user = {
  name: 'admin',
  password: 'admin'
};

var pouchOpts = {
  skip_setup: true
};

var ajaxOpts = {
  ajax: {
    headers: {
      Authorization: 'Basic ' + window.btoa(user.name + ':' + user.password)
    }
  }
};

var db = new PouchDB('http://localhost:5984/test', pouchOpts);

db.login(user.name, user.password, ajaxOpts).then(function() {
  return db.allDocs();
}).then(function(docs) {
  console.log(docs);
}).catch(function(error) {
  console.error(error);
});

1
skipSetup 属性已更改为 skip_setup - Yvonne Aburrow

0

我使用PouchDB-Authentication进行同步

 npm i pouchdb-authentication

插件导入

var PouchDB = require("pouchdb");
PouchDB.plugin(require('pouchdb-authentication'));

代码:

var localDb = new PouchDB('mydatabase');
var remoteDb = new PouchDB('http://localhost:5984/mydatabase', {skip_setup: true});

remoteDb.login(username, password).then(function () {
  localDb.sync(remoteDb, {live: true, retry: true, /* other sync options */});
});

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