簡體   English   中英

如何處理授權令牌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM