如何使用RxDB处理JWT身份验证? [英] How to handle JWT authentication with RxDB?

查看:18
本文介绍了如何使用RxDB处理JWT身份验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个本地RxDB数据库,我想用CouchDB连接它。除了身份验证之外,一切似乎都很正常。我不知道如何以不同方式添加它,然后在数据库url中插入凭据:

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

我想使用JWT身份验证,但找不到如何向同步请求添加令牌。我只找到了PouchDB(pouchdb身份验证插件)的一些解决方案,但无法使其与RxDB一起工作。

推荐答案

RxDB与PouchDB紧密耦合,并在幕后使用其同步实现。据我所知,向远程PouchDB实例添加自定义头(这是在sync中将url作为remote参数传递时为您创建的)的唯一方法是intercept the HTTP request

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 replication documentation(Sync)还声明:

remoteDB可以是字符串,也可以是PouchDB对象。如果您在远程数据库上有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,
});

这篇关于如何使用RxDB处理JWT身份验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆