2012-08-26 36 views
3

我有一個小小的Yesod應用程序(使用腳手架)。我想爲所有請求添加基本的HTTP身份驗證。這是我到目前爲止的嘗試:Yesod的基本HTTP驗證

  • 我已閱讀Yesod身份驗證的文檔,但不幸的是沒有後端支持這一點。
  • isAuthorized會很好,但我看不到一種方式來閱讀那裏的標題。
  • WAI中間件將會很優雅,但我找不到任何文檔描述如何使用完整的Yesod應用程序。同樣很清楚的是寫一個並不是很微不足道。

這已經完成了嗎?我應該如何處理這個問題?

回答

4

我想出了一個非理想的解決方案:我在我的所有處理函數中添加了一個動作。也許這會對某人有用,也許有人可以改進這一點。下面的代碼:

httpBasicAuth :: Handler() 
httpBasicAuth = do 
    request <- waiRequest 
    case lookup "Authorization" (requestHeaders request) of 
    Just "Basic base64encodedusernameandpassword" -> return() 
    _ -> do 
     setHeader "WWW-Authenticate" "Basic Realm=\"My Realm\"" 
     permissionDenied "Authentication required" 

,並用它:

fooR :: Handler() 
fooR = httpBasicAuth >> do 
    sendResponseStatus status200() 

,我會很樂意,如果有更好的解決方案發布到移動「接受」對號更多。

+0

Upvoted因爲我可能不得不這樣做,我自己和你的榜樣是我迄今爲止唯一能找到的。 –

+4

自從這個問題被問到一段時間了,但因爲這是谷歌對「yesod http basic auth」的最高結果,所以我想把人們指向http://stackoverflow.com/q/24770415/1176156,它解釋瞭如何使用WAI中間件做HTTP基本認證。 – MaxGabriel