Yesod中的基本HTTP身份验证

时间:2012-08-26 07:46:33

标签: haskell yesod

我有一个小的Yesod应用程序(使用脚手架)。我想为所有请求添加基本的HTTP身份验证。这是我到目前为止所尝试的:

  • 我已经阅读了有关Yesod身份验证的文档,但遗憾的是没有后端支持这一点。
  • isAuthorized会很棒,但我看不到有办法阅读那里的标题。
  • WAI中间件会很优雅,但我找不到任何描述如何使用完整Yesod应用程序的文档。同样非常清楚,写一个并不是完全无足轻重的。

这已经完成了吗?我该怎么做呢?

1 个答案:

答案 0 :(得分:5)

我提出了一个非理想的解决方案:我将一个动作添加到我的所有处理函数中。也许这对某人有用,也许有人可以改进这一点。这是代码:

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

如果发布更好的解决方案,我会非常乐意移动“已接受”的复选标记。