2014-10-27 16 views
6

Làm cách nào để đảm bảo rằng người dùng hiện tại có quyền truy cập cơ sở dữ liệu CouchDB qua PouchDB? Từ thử nghiệm của tôi, hãy gọi phương thức PouchDB() mới với tên cơ sở dữ liệu CouchDB cấp cho bạn quyền truy cập vào dữ liệu đó.Ủy quyền đồng bộ hóa PouchDB?

Đặt require_valid_user thành true trong Futon có vẻ hiệu quả, nhưng cửa sổ phương thức Futon vẫn bật lên sau khi xác thực người dùng qua POST/_session. Tôi muốn có một màn hình đăng nhập chuẩn (tên người dùng và mật khẩu) ghi nhật ký người dùng vào ứng dụng của tôi và cấp quyền truy cập vào cơ sở dữ liệu CouchDB chính xác (qua PouchDB). Tôi có thể làm điều này không? Chúng tôi rất trân trọng bất kỳ sự giúp đỡ nào.

+0

Bạn có thể muốn kiểm tra plugin này https://github.com/nolanlawson/pouchdb-authentication – twilson63

Trả lời

7

Có một plugin PouchDB xây dựng bởi Nolan Lawson cung cấp PouchDb với một API xác thực:

var db = new PouchDB('http://mysite:5984/mydb'); 
db.login('batman', 'brucewayne').then(function (batman) { 
    console.log("I'm Batman."); 
    return db.logout(); 
}); 

Sau đây là các phương pháp đó trộn lẫn trong:

  • đăng ký
  • đăng nhập
  • đăng xuất
  • getSession
  • getUser

Để ngăn chặn hộp thoại phương thức xác thực cơ sở HTTP của trình duyệt cũ, chúng ta phải tinh tế trong cách sử dụng PouchDB. Để ngăn chặn một yêu cầu không được thẩm định lại cho CouchDB (được sử dụng để kiểm tra xem liệu DB từ xa có tồn tại) hay không, hãy bỏ qua skipSetup: true trong các tùy chọn hàm tạo của Pouch. Thứ hai, để xác thực yêu cầu chống lại _session, thêm tiêu đề ủy quyền cơ bản HTTP vào các tùy chọn AJAX của db.login().

var user = { 
    name: 'admin', 
    password: 'admin' 
}; 

var pouchOpts = { 
    skipSetup: 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); 
}); 
+0

'cái tài sản skipSetup' đã được thay đổi cho 'skip_setup' –

Các vấn đề liên quan