javascript - 如何处理授权 token

标签 javascript cyclejs

我想在每次发送 http 请求时将身份验证 token 添加到 http 请求 header ,如果授权失败,我想将用户重定向到登录。我应该装饰 Http Driver 还是有更好的方法呢?

我提出了一个装饰 http 驱动程序的解决方案。但我不确定这是正确的做法。到目前为止,这是我编写的代码:

import Rx from 'rx';
import {makeHTTPDriver} from '@cycle/http';

function makeSecureHTTPDriver({eager = false} = {eager: false}) {

    return function secureHTTPDriver(request$) {
        const httpDriver = makeHTTPDriver(eager);

        const securedRequest$ = request$
            .map(request => {
                const token = localStorage.getItem('token');

                if (token) {
                    request.headers = request.headers || {};
                    request.headers['X-AUTH-TOKEN'] = token;
                }

                return request;
            });

        const response$ = httpDriver(securedRequest$);
        //todo: check response and if it fails, redirect to the login page

        return response$;
    }
}

export default makeSecureHTTPDriver;

这是我如何使用 makeSecureHttpDriver 的代码

const drivers = {
        DOM: makeDOMDriver('#app'),
        HTTP: makeSecureHttpDriver()
    };

最佳答案

这有点晚了,我不经常这样做。我建议改用其他驱动程序,以避免在您的驱动程序中放置任何逻辑。

import storageDriver from '@cycle/storage'
import {makeHTTPDriver} from '@cycle/http'

function main(sources) {
 const {storage, HTTP} = sources
 const token$ = storage.local.getItem('token')
  .startWith(null)

 const request$ = createRequest$(sources)

 const secureRequest$ = request$.withLatestFrom(token$, 
   (request, token) => token ? 
     Object.assign(request, {headers: {'X-AUTH-HEADER' : token }) : 
     request
 )
 return {HTTP: secureRequest$, ...}
}

Cycle.run(main, {
 ...
 storage: storageDriver,
 HTTP: makeHTTPDriver()
})

关于javascript - 如何处理授权 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482914/

相关文章:

javascript - 如何使用 CycleJS 将 html 插入 iframe

html - 如何使用带有外部模板的 Cyclejs

javascript - RxJS:处理 cycle.js 自定义驱动程序中的错误

javascript - Gulp:如果缺少命令行参数,则中止构建

javascript - Vue.js 'v-bind:class' 不更新,即使模型更新

javascript - 用于网络浏览器的 Ruby 插件?

javascript - 如何对数组 obj 进行分组?

javascript - 使用 :hover to modify the css of another class?

javascript - Cycle.js 应用程序未捕获的类型错误

javascript - 创建 Cycle.js 可重用模块