Haskell YesSOD中的基本HTTP身份验证

Haskell YesSOD中的基本HTTP身份验证,haskell,yesod,Haskell,Yesod,我有一个很小的Yesod应用程序(使用scaffold)。我想向所有请求添加基本的HTTP身份验证。以下是我迄今为止所做的尝试: 我已经阅读了关于YesSOD身份验证的文档,但不幸的是没有后端支持这一点 isAuthorized会很好,但我看不到一种读取标题的方法 WAI中间件应该很优雅,但我找不到任何文档描述如何将其与完整的YesSOD应用程序结合使用。同样很清楚的是,写一篇文章并不是一件小事 这已经完成了吗?我应该如何处理这个问题?我想出了一个不理想的解决方案:我在所有处理程序函数中预先

我有一个很小的Yesod应用程序(使用scaffold)。我想向所有请求添加基本的HTTP身份验证。以下是我迄今为止所做的尝试:

  • 我已经阅读了关于YesSOD身份验证的文档,但不幸的是没有后端支持这一点
  • isAuthorized
    会很好,但我看不到一种读取标题的方法
  • WAI中间件应该很优雅,但我找不到任何文档描述如何将其与完整的YesSOD应用程序结合使用。同样很清楚的是,写一篇文章并不是一件小事

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

我想出了一个不理想的解决方案:我在所有处理程序函数中预先设置了一个操作。也许这对某人有用,也许有人可以改进。代码如下:

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"

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

我投了赞成票,因为我可能不得不自己做类似的事情,而你的例子是迄今为止我唯一能找到的东西。问这个问题已经有一段时间了,但因为这是谷歌上“YesSOD http basic auth”的最高结果我想告诉人们如何使用WAI中间件进行HTTP基本身份验证。
fooR :: Handler ()
fooR = httpBasicAuth >> do
  sendResponseStatus status200 ()