2014-10-25 3 views
0

Я использую встроенный веб-сервер YAWS с сеансом cookie yaws. Сначала я аутентифицирую пользователя с именем пользователя &, чтобы он мог войти на веб-страницы.Пользователь может получить доступ к внутренним страницам рыскания без аутентификации

Моя проблема заключается в том, что пользователь непосредственно открывает внутреннюю веб-страницу вместо страницы входа в систему, которую он может просматривать даже без аутентификации. Как ограничить пользователя тем, что он должен иметь файл cookie для просмотра любой внутренней веб-страницы.

ответ

4

В chapter 7 of the Yaws PDF documentation есть пример, который делает именно то, о чем вы просите. Он использует перестройку arg для перенаправления неавторизованных запросов на страницу входа.

Сначала мы настраиваем модуль Arg ReWriter имени myapp в серверной части yaws.conf:

arg_rewrite_mod = myapp 

myapp:arg_rewrite/1 функция проверяет входящий запрос через #arg{} записи для поиска конкретного печенья, и если не найдены и запрос не пытается получить один из трех ресурсов, возвращенных из функции login_pages/0, она вызывает do_rewrite/1 переписать запрос, чтобы доставить login.yaws страницы вместо:

arg_rewrite(Arg) -> 
    OurCookieName = "myapp_sid" 
    case check_cookie(Arg, OurCookieName) of 
     {error, _} -> 
      do_rewrite(Arg); 
     {ok, _Session} -> 
      %% return Arg untouched 
      Arg 
end. 

%% these pages must be shippable without a good cookie 
login_pages() -> 
    ["/banner.gif", "/login.yaws", "/post_login.yaws"]. 

do_rewrite(Arg) -> 
    Req = Arg#arg.req, 
    {abs_path, Path} = Req#http_request.path, 
    case lists:member(Path, login_pages()) of 
     true -> 
      Arg; 
     false -> 
      Arg#arg{req = Req#http_request{path = {abs_path, "/login.yaws"}}, 
        state = Path} 
end. 

Дополнительную информацию см. На странице Yaws PDF documentation.

+0

:) Я уже нашел того же приятеля, но в любом случае Спасибо :) – Khanjarrr