J'utilise PouchDB et CouchDB dans une application ionique. Alors que je peux synchroniser avec succès les bases de données locales et distantes sur Chrome et Android, j'obtiens une erreur non autorisée sur Safari / iOS lorsque je lance la commande de synchronisation. Vous trouverez ci-dessous une version simplifiée de mon fournisseur de services de base de données.
import PouchDB from 'pouchdb';
import PouchDBAuthentication from 'pouchdb-authentication';
@Injectable()
export class CouchDbServiceProvider {
private db: any;
private remote: any;
constructor() {
PouchDB.plugin(PouchDBAuthentication);
this.db = new PouchDB('localdb', {skip_setup: true});
}
...
login(credentials) {
let couchDBurl = 'URL of my couchDB database';
this.remote = new PouchDB(couchDBurl);
this.remote.logIn(credentials.username, credentials.password, function (err, response) {
if (err) { concole.log('login error') }
else {
let options = { live: true, retry: true, continuous: true };
this.db.sync(this.remote, options).on('error', (err_) => { console.log('sync error')});
}
})
}
...
}
Dans le code ci-dessus, this.remote.logIn(...)
a réussi mais this.db.sync(...)
échoue. J'ai vérifié les demandes via l'onglet réseau des outils de développement et je pense que le problème est que le cookie qui est retransmis dans l'en-tête de la réponse de this.remote.logIn(...)
n'est pas utilisé par les appels suivants (d'où l'erreur non autorisée). Le problème est résolu une fois que les cookies tiers sont activés sur Safari, ce qui n'est pas une option sur iOS.
Comment puis-je résoudre ce problème ?
Une solution potentielle que j'envisage est d'écraser fetch
pour utiliser un client http natif (c'est-à-dire une instance de HTTP
de @ionic-native/http
). Il semble que la modification des clients http soit une possibilité (par exemple, d'après ceci conversation ) mais je ne suis pas sûr de savoir comment y parvenir.