2014-07-16 2 views
4

Я пытаюсь настроить промежуточный экземпляр моего веб-сервера yesod, и мне было интересно, есть ли какой-нибудь простой способ защитить весь пароль сайта. В частности, я хочу иметь возможность запрашивать тех, кто перешел на мой сайт для получения учетных данных. После аутентификации он должен функционировать как типичный сайт. Но если они не могут аутентифицироваться, они ничего не должны видеть.yesod - сайт для защиты паролем

ответ

5

Чтобы расширить @ ответ MichaelSnoyman, вот как я реализовал WAI HTTP Auth промежуточное программное обеспечение:

С scaffolded сайта, я пошел в 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 и 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:

HTTP auth browser screenshot

Этот вид аутентификации не очень подходит для обычных пользователей, но отлично подходит для блокировки вниз сайт, предназначенный для внутреннего использования. Это также простой способ для компьютеров (серверов мониторинга, скриптов) аутентифицироваться на вашем сервере.

+0

Вау, я знал, что должен быть легкий ответ. Вот! Огромное спасибо! – user3505407

3

Вы можете использовать промежуточное программное обеспечение http auth.

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

К сожалению, для краткости, на мобильный.

+0

Если вы уже открываете сайт с помощью Ngnix или Apache, они могут выполнять HTTP-авторизацию перед вызовом вашего сайта Yesod. (Я всегда использую один из интерфейсов wai типа fcgi под Apache, но это было какое-то время.) –

+0

Правда, это тоже хороший вариант. –

+0

Извините, я немного смущен относительно того, как использовать предоставленный код в рамках Yesod. Как я должен использовать/активировать этот код и как мне заставить его запрашивать аутентификацию (т. Е. Тест/тест пользователя/пропуск)? – user3505407

Смежные вопросы