[英]How do you handle download link that requires Authorization token using Angular?
[英]How to handle authorization token
我希望每次發送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() };
這有點晚了,我不經常這么做。 我建議使用其他驅動程序,以避免在驅動程序中放置任何邏輯。
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()
})
我不確定這是否會有所幫助,但HTTP驅動程序在引擎蓋下是超級的,所以你可以傳遞一個類似於此處所需信息的對象。
但是關於你的問題,我認為HTTP driver
可能需要將此選項添加到驅動程序中,因此您可以指示驅動程序是否應該是安全的,例如:
const drivers = {
DOM: makeDOMDriver('#app'),
HTTP: makeSecureHttpDriver({secure:true})
};
因為您的實現對我來說沒什么問題,所以在驅動程序本身中使用它可能是值得的。 我在HTTP驅動程序repo中創建了一個問題,看看社區的想法,你也可以讓人們通過gitter頻道進行交互:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.