我想在每次发送 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/