У них модуль есть такой MT::Auth. Читать здесь http://www.movabletype.org/documentatio … /Auth.html . Им бы в штат русского переводчика они-бы продвинули свою систему в России. Я пытался использовать этот объект, но пока безуспешно, требует еще подключать обьекты и т. д. Времени все нет разобраться как у них все работает. У меня просто есть идейка выполнить на странице с расширением .shtml работу скрипта на Перл. То есть, что-бы на одной и той-же странице все это выполнялось, к примеру:
1. пользователь щелкнул на ссылку, загрузилась страница
2. страница подгружает скрипт на Перл, скрипт выводит форму
3. пользователь заполняет форму, отправляет
4. скрипт проверяет данные и если находит ошибку, то на этой-же странице выводит сообщение, например предлагает исправить ошибки.
Это все можно реализовать на Perl+SSI. В моем случае, я проверял авторизовался-ли пользователь, и если нет выводил сообщение.
Сначала надо проверить есть-ли у пользователя куки:
my $s = $cgi -> cookie(-name => 'mt_blog_user');
my %h = map get_pair($_), split /;/, $s;
my ($sid, $name, $is_authenticated);
$sid = $h{sid};
$name = $h{name};
$is_authenticated = $h{is_authenticated};
sub get_pair {
return ($1, $2) if shift =~ /^(.*):(.*)$/;
return (0, 0);
}
Проверяем в $sid должен лежать идентификатор сессии, в $name - имя, а тут в единицу $is_authenticated если ты авторизовался.
Проблема в том что куки можно подменить так как лежат они у юзера на компе, поэтому лезем в базу данных, в таблицу mt_session.
my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
my $sth=$dbh->prepare("select session_id, session_name from mt_session where session_id=$sid");
$sth->execute;
my($session_id, $session_name) = $sth->fetchrow();
$sth->finish;
$dbh->disconnect;
Достаем из таблицы session_id это и есть наш $sid, и session_name - имя сессии совпадает с именем юзера. Проверяем, если совпадают, то лезем в другую таблицу mt_author, это что-бы получить идентификатор пользователя, мне удобнее хранить имя пользователя в виде его идентификатора.
my $dbh = DBI->connect("DBI:mysql:$db:$host", $user, $passwd) || die "$!";
my $sth=$dbh->prepare("select author_id from mt_author where author_nickname=$name");
$sth->execute;
my $author_id = $sth->fetchrow();
$sth->finish;
$dbh->disconnect;
proverka_poley_form($author_id);
Когда достаем идентификатор пользователя, то передаем его в другую функцию, которая проверяет данные введенные в форму, и если что опять пошло не так, то на этой-же странице выводим сообщение. Какая проблема возникла у меня: Я проверял авторизовался-ли пользователь, и если не авторизовался выводил ему сообщение, так вот если потом тут-же нажать на авторизацию, то получал ошибку 500. Немного затупил, надо было просто очистить все параметры: $cgi->delete_all(); и все! А я полез уже в код МТ, пару часов потратил. Но все равно придется переписывать многие вещи, просто надо понять как все работает у них, позубрить Перл.