如何处理授权令牌

时间:2016-02-18 13:34:27

标签: javascript cyclejs

我想在每次发送http请求时将auth令牌添加到http请求标头,如果授权失败,我想将用户重定向到登录。我应该装饰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()
    };




2 个答案:

答案 0 :(得分:2)

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

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()
})

答案 1 :(得分:1)

我不确定这是否会有所帮助,但是HTTP驱动程序是非常有用的,所以你可以传递一个像here这样的必需信息的对象。

但是关于你的问题,我认为HTTP driver可能需要将此选项添加到驱动程序中,因此你可以决定驱动程序是否安全,例如:

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

因为您的实现对我来说没问题,所以在驱动程序本身中使用它可能是值得的。 我在HTTP驱动程序repo中创建了一个问题,看看社区的想法,你也可以让人们通过gitter channel进行交互: - )