4

小さめのYesodアプリケーションがあります(スキャフォールドを使用)。すべてのリクエストに基本HTTP認証を追加したいと思います。これが私がこれまでに試したことです:

  • Yesod認証に関するドキュメントを読みましたが、残念ながら、これをサポートするバックエンドはありません。
  • isAuthorized素晴らしいと思いますが、そこにあるヘッダーを読み取る方法がわかりません。
  • WAIミドルウェアはエレガントですが、完全なYesodアプリケーションでWAIミドルウェアを使用する方法を説明しているドキュメントは見つかりません。また、それを書くことは完全に些細なことではないこともかなり明らかです。

これはすでに行われていますか?これにどのようにアプローチすればよいですか?

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 に答える