Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Http-авторизация на Perl


Автор: Gekt0r 19.2.2009, 13:37
Всем привет, вопрос следующий..
Есть большой сайт, сделанный на перле с использованием HTML::Mason.
Надо сделать возможность вешать апач-авторизацию на некоторые страницы сайта (и при желании ее отключать и снова включать из админки).
Я несколько дней копаюсь и уже с этим завис.
В инете нашел решение, однако оно требует подключения к апачу mod_rewrite, а хочется без этого.

Пока все, что я сделал, это научился вызывать запрос авторизации на страницу:


Код

use CGI;

my $q = CGI->new;
print $q->header(-status => 401,
                  -www_authenticate => 'Basic realm="test"',
                  -type => 'text/html'),
       $q->start_html('Authorization required'),
       $q->h2('Authorization required'),
       $q->end_html;


благодаря этому, у меня вываливается запрос авторизации. Однако я не знаю, как получить данные, которые введет пользователь. Можете подсказать?

Автор: arto 19.2.2009, 14:59
cgi не имеет доступа к данныем http-авторизации без трюков, как например с mod_rewrite.

Автор: Gekt0r 19.2.2009, 15:14
а как тогда это можно сделать?)

Автор: KSURi 19.2.2009, 16:09
Цитата(arto @  19.2.2009,  14:59 Найти цитируемый пост)
cgi не имеет доступа к данныем http-авторизации без трюков, как например с mod_rewrite.

Разве? а @ENV{qw(HTTP_USER HTTP_PASS)} ?

Автор: Gekt0r 19.2.2009, 16:14
Цитата(KSURi @ 19.2.2009,  16:09)
Цитата(arto @  19.2.2009,  14:59 Найти цитируемый пост)
cgi не имеет доступа к данныем http-авторизации без трюков, как например с mod_rewrite.

Разве? а @ENV{qw(HTTP_USER HTTP_PASS)} ?

Куда это вставить в моем коде?)))

Автор: ginnie 19.2.2009, 17:16
KSURi, откуда информация об этих переменных? Поиски в Google положительных результатов не дали.

Автор: KSURi 19.2.2009, 17:43
Да уж, попутал я. Мало того, что вспомнил почему-то переменные окружения PHP_AUTH_USER и PHP_AUTH_PW из PHP (подумал, что в перле такие же есть), так и еще и их имена перепутал(

Gekt0r, никуда не вставляйте. Ошибся я.

Автор: arto 19.2.2009, 20:02
либо mod_rewrite, либо mod_perl.

либо сделать авторизацию на сессиях.

Автор: Gekt0r 20.2.2009, 12:42
А mod_perl'ом как это можно сделать?
Именно http-авторизацию

Автор: arto 20.2.2009, 14:01
у него есть доступ к потрохам протокола, т.е. доступ к паролю, который посылает клиент.

Автор: Gekt0r 20.2.2009, 15:25
Я это знаю!)
основная проблема, что я не знаю, как вытащить эти данные!)
вот в мой код что и куда надо добавить, чтобы получить то, что вводит юзер?

Автор: arto 24.2.2009, 07:51
http://www.modperl.com/book/chapters/ch6.html

Автор: Gekt0r 25.2.2009, 12:06
не работает ссылка

Автор: KSURi 25.2.2009, 13:47
Цитата(Gekt0r @  25.2.2009,  12:06 Найти цитируемый пост)
не работает ссылка 

Вот это посмотрите: http://perl.apache.org/docs/2.0/api/Apache2/Access.html#Synopsis

Автор: Gekt0r 2.3.2009, 15:41
Хм.. Не ловится в скрипте имя и пароль без mod_rewrite

я пробую через $r->user() и $r->get_basic_auth_pw
получаю пустые строки вместо переменных.

Однако, есть директории, которые прописаны в httpd.conf, и на которых авторизация работает. 
В чем разница вообще? По идее, что в httpf.conf прописано, что я вручную заголовки посылаю (как в первом посте), разницы быть не должно?

Автор: ginnie 2.3.2009, 15:48
Gekt0r, разница в том, что когда  Basic-аутентификация прописана в конфиге, apache обрабатывает поле Authorization, в случае, если Вы самостоятельно посылаете заголовки, apache это поле не обрабатывает, и Вам надо это делать самостоятельно.

Автор: Gekt0r 3.3.2009, 17:09
это можно сделать без mod_rewrite?
и как?...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)