1 Отредактировано marlik (26:02:2010 18:29:24)

Тема: Авторизация

Доброго времени суток, ситуация такая: есть в наличии модуль - авторизация, то есть, поместил его на страницу, щелкнул, и моментально авторизовался, вот и возникает вопрос, а есть-ли старые образцы авторизации, с полями логина и пароля? А то меня этот не устраивает. Или может кто знает как МТ авторизует людей. Я представляю как, но ковыряться в коде, искать не хочется. Тыкните носом в каком месте это реализуется плз.



Все, нашел...

2

Re: Авторизация

расскажи как

3

Re: Авторизация

У них модуль есть такой 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(); и все! А я полез уже в  код МТ, пару часов потратил. Но все равно придется переписывать многие вещи, просто надо понять как все работает у них, позубрить Перл.

4

Re: Авторизация

При использовании Community Solution есть возможность редактировать формы авторизации. То есть можно сделать из стандартной формы MT страницу под стиль сайта. А затем в JS-файле, который используется при авторизации для комментирования, просто добавить ссылку на форму. Можно и так :)

5

Re: Авторизация

А это можно как-то интегрировать в русскую МТ? Или блог такой надо делать?

6

Re: Авторизация

Нужно просто добавить аддоны: http://movable-type.ru/wiki/Обновление_MT_до_MT_Pro

7 Отредактировано marlik (03:03:2010 12:39:27)

Re: Авторизация

По моему там ссылка не туда кажет. Где скачать русскую Pro для 4.32?

Нашел английскую, в заначке валялась. Будем пробовать. Спасибо.

8

Re: Авторизация

Русской версии Pro нет и не будет, так как она распространяется по другой лицензии, согласно которой дистрибутив нельзя свободно распространять. Поэтому только инструкция :)

То есть, что нужно сделать:

— Установить русскую версию.
— Скачать английскую, скопировать из неё файлы в русскую версию.
— Пройти процесс обновления.