我正在尝试设置我的yesod网络服务器的暂存实例,我想知道是否有一些简单的方法可以保护整个网站的密码。具体来说,我希望能够提示导航到我的网站的人获取凭据。在进行身份验证后,它应该作为典型的站点。但如果他们不能自我认证,他们应该什么也看不见。
答案 0 :(得分:5)
为了扩展@ 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中的样子:
这种身份验证并不适合普通用户,但它非常适合锁定一个供内部使用的网站。它也是机器(监视服务器,脚本)通过服务器验证自身的简便方法。
答案 1 :(得分:3)
您可以使用http auth中间件。
http://hackage.haskell.org/package/wai-extra-3.0.1/docs/Network-Wai-Middleware-HttpAuth.html
很抱歉,在手机上简洁。