我有一个很小的 Yesod 应用程序(使用脚手架)。我想为所有请求添加基本的 HTTP 身份验证。这是我到目前为止所尝试的:
- 我已经阅读了有关 Yesod 身份验证的文档,但不幸的是没有后端支持这一点。
isAuthorized
会很棒,但我看不到那里读取标题的方法。- WAI 中间件会很优雅,但我找不到任何描述如何将其与完整 Yesod 应用程序一起使用的文档。同样很清楚的是,写一个并不是完全微不足道的。
这已经完成了吗?我应该如何处理这个?
我想出了一个不理想的解决方案:我在我的所有处理函数中添加一个动作。也许它对某人有用,也许有人可以改进这一点。这是代码:
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 ()
如果发布了更好的解决方案,我将非常乐意移动“已接受”复选标记。