【问题标题】:Basic HTTP Auth in YesodYesod 中的基本 HTTP 身份验证
【发布时间】:2012-08-30 23:27:59
【问题描述】:

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

  • 我已阅读有关 Yesod 身份验证的文档,但遗憾的是没有后端支持这一点。
  • isAuthorized 会很棒,但我看不到在那里读取标题的方法。
  • WAI 中间件会很优雅,但我找不到任何文档描述如何将其与完整的 Yesod 应用程序一起使用。很明显,写一个也不是一件小事。

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

【问题讨论】:

    标签: haskell yesod


    【解决方案1】:

    我想出了一个不理想的解决方案:我在我的所有处理函数中添加一个动作。也许它对某人有用,也许有人可以改进这一点。代码如下:

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

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

    【讨论】:

    • 赞成,因为我可能不得不自己做这样的事情,而你的例子是我迄今为止唯一能找到的。
    • 自从提出这个问题以来已经有一段时间了,但是由于这是谷歌上“yesod http basic auth”的最高结果,我想将人们指向stackoverflow.com/q/24770415/1176156,它解释了如何使用WAI中间件进行 HTTP 基本身份验证。
    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 2011-11-12
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多