Yesod中的基本HTTP身份验证

abe*_*sto 4 haskell yesod

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

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

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

abe*_*sto 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"
Run Code Online (Sandbox Code Playgroud)

并使用它:

fooR :: Handler ()
fooR = httpBasicAuth >> do
  sendResponseStatus status200 ()
Run Code Online (Sandbox Code Playgroud)

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

  • 自问这个问题以来已经有一段时间了,但由于这是谷歌"yesod http basic auth"的最佳结果,我想点人们http://stackoverflow.com/q/24770415/1176156解释如何使用WAI中间件做HTTP基本身份验证. (5认同)