簡體   English   中英

如何使用 RxDB 處理 JWT 身份驗證?

[英]How to handle JWT authentication with RxDB?

我有一個本地 RxDB 數據庫,我想將它與 CouchDB 連接。 除了身份驗證之外,一切似乎都運行良好。 我不知道如何以不同的方式添加它,然后在數據庫 url 中插入憑據:

database.tasks.sync({
        remote: `http://${username}:${pass}@127.0.0.1:5984/tododb`,
      });

我想使用 JWT 身份驗證,但找不到如何添加令牌來同步請求。 我只找到了一些 PouchDB(pouchdb-authentication 插件)的解決方案,但無法讓它與 RxDB 一起使用。

RxDB 與 PouchDB 緊密耦合,並在后台使用其同步實現。 據我了解,將自定義標頭添加到遠程 PouchDB 實例(當您將 url 作為remote參數sync傳遞時為您創建的)的唯一方法是攔截 HTTP 請求

var db = new PouchDB('http://example.com/dbname', {
  fetch: function (url, opts) {
    opts.headers.set('X-Some-Special-Header', 'foo');
    return PouchDB.fetch(url, opts);
  }
});

PouchDB 復制文檔(sync) 還指出:

remoteDB 可以是字符串或 PouchDB object。 如果您在遠程數據庫上有一個 fetch 覆蓋,您將希望使用 PouchDB 對象而不是字符串,以便使用這些選項。

幸運的是,RxDB 的Rx.Collection.sync不僅接受服務器 url 作為remote參數,還接受另一個 RxCollection 或 PouchDB 實例。

RxDB 甚至重新導出內部使用的 PouchDB 模塊,因此您不必安裝 PouchDB 作為直接依賴項。

import { ..., PouchDB } from 'rxdb';

// ...


const remotePouch = new PouchDB('http://27.0.0.1:5984/tododb', {
  fetch: function (url, opts) {
    opts.headers.set('Authorization', `Bearer ${getYourJWTToken()}`)
    return PouchDB.fetch(url, opts);
  }
})

database.tasks.sync({
  remote: remotePouch,
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM