2014-10-27 14 views
6

Come faccio a garantire che l'utente corrente abbia l'autorizzazione per accedere a un database CouchDB tramite PouchDB? Dalla mia sperimentazione, chiamare il nuovo metodo PouchDB() con il nome del database CouchDB garantisce l'accesso a tali dati.Autorizzazione sincronizzazione PouchDB?

L'impostazione di require_valid_user su true in Futon sembra funzionare, ma la finestra modale Futon appare ancora dopo aver autenticato l'utente tramite POST/_session. Voglio avere una schermata di login standard (nome utente e password) che registra l'utente nella mia applicazione e garantisce l'accesso al database CouchDB corretto (tramite PouchDB). Posso farlo? Qualsiasi aiuto sarà molto apprezzato.

+0

Si consiglia di controllare questo plugin https://github.com/nolanlawson/pouchdb-authentication – twilson63

risposta

7

C'è un plugin PouchDB costruito da Nolan Lawson che fornisce PouchDb con un API di autenticazione:

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

Questi sono i metodi si mescola in:

  • iscrizione
  • login
  • logout
  • getSession
  • getUser

Per impedire le finestre di dialogo modale di autenticazione HTTP del browser dei vecchi tempi, dobbiamo essere sottili nel modo in cui usiamo PouchDB. Per impedire una richiesta non autenticata a CouchDB (usata per verificare se esiste il DB remoto), passa skipSetup: true nelle opzioni del costruttore di Pouch. In secondo luogo, per autenticare la richiesta contro _session, aggiungi l'intestazione di autorizzazione di base HTTP alle opzioni AJAX di 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

la proprietà 'skipSetup' è stato cambiato in' skip_setup' –