【问题标题】:yesod -- password protecting staging siteyesod -- 密码保护登台站点
【发布时间】:2014-09-06 08:52:04
【问题描述】:

我正在尝试设置我的 yesod 网络服务器的暂存实例,我想知道是否有一些简单的方法可以保护整个站点的密码。具体来说,我希望能够提示那些导航到我的网站的人提供凭据。在他们进行身份验证后,它应该可以作为典型站点运行。但如果他们无法验证自己的身份,他们应该什么也看不到。

【问题讨论】:

    标签: authentication haskell passwords yesod


    【解决方案1】:

    为了扩展@MichaelSnoyman 的回答,以下是我实现 WAI HTTP Auth 中间件的方式:

    从脚手架站点,我去了Application.hs,它已经设置了一些日志中间件,如下所示:

    makeApplication :: AppConfig DefaultEnv Extra -> IO Application
    makeApplication conf = do
        foundation <- makeFoundation conf
    
        -- Initialize the logging middleware
        logWare <- mkRequestLogger def
            { outputFormat =
                if development
                    then Detailed True
                    else Apache FromSocket
            , destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
            }
    
        -- Create the WAI application and apply middlewares
        app <- toWaiAppPlain foundation
        return $ logWare app
    

    为了添加 HTTP 身份验证,我引用了 Yesod 书的 chapter on WAI 和 Michael 引用的 HttpAuth docs。文档将此作为使用 HttpAuth 中间件的示例:

    basicAuth (\u p -> return $ u == "michael" && p == "mypass") "My Realm"
    

    我可以在应用日志中间件后将其粘贴到右下方:

    import qualified Network.Wai.Middleware.HttpAuth as HttpAuth
    
    makeApplication :: AppConfig DefaultEnv Extra -> IO Application
    makeApplication conf = do
        foundation <- makeFoundation conf
    
        -- Initialize the logging middleware
        logWare <- mkRequestLogger def
            { outputFormat =
                if development
                    then Detailed True
                    else Apache FromSocket
            , destination = RequestLogger.Logger $ loggerSet $ appLogger foundation
            }
    
        -- Create the WAI application and apply middlewares
        app <- toWaiAppPlain foundation
        return $ logWare $ HttpAuth.basicAuth (\u p -> return $ u == "michael" && p == "mypass") "My Realm" $ app
    

    这是 Safari 中的样子:

    这种身份验证并不适合普通用户,但它非常适合锁定供内部使用的网站。这也是机器(监控服务器、脚本)向您的服务器进行身份验证的一种简单方法。

    【讨论】:

    • 哇,我知道一定有一个简单的答案。这里是!非常感谢!
    【解决方案2】:

    您可以使用 http auth 中间件。

    http://hackage.haskell.org/package/wai-extra-3.0.1/docs/Network-Wai-Middleware-HttpAuth.html

    抱歉,为了简洁,在手机上。

    【讨论】:

    • 如果您已经在使用 Ngnix 或 Apache 对站点进行前端处理,他们也可以在调用您的 yesod 站点之前进行 HTTP 身份验证。 (我总是最终使用 Apache 下的 fcgi 类型的 wai 接口之一,但已经有一段时间了。)
    • 对不起,我对如何在 yesod 框架中使用提供的代码有点困惑。我应该如何使用/激活此代码,以及如何使其提示进行身份验证(即用户/通过测试/测试)?
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 2014-05-11
    • 2014-05-24
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多