4

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

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

这已经完成了吗?我应该如何处理这个?

4

1 回答 1

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

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

于 2012-08-30T15:27:59.840 回答