Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен совет, МТ+PCGI+Регистрация 
V
    Опции темы
Marlik
Дата 24.10.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Доброго всем. Пытаюсь переделать регистрацию на Movable Type 5.2.7.  МТ запустил как pcgi. Работает в такой связке nginx+starman.

Принцип регистрации:

Пользователь жмет ссылку авторизации, в ссылке заложены сам скрипт, id блога, id записи в блоге(если он нажал на ссылку рядом с записью), и возвратный url. Далее подгружается этот скрипт. Скрипт вываливает окно логина, внизу ссылка на регистрацию. При нажатии на нее подгружается форма регистрации. Шаблон этой регистрации я уже переделал как нужно мне. 

Форму логина вываливает метод login_form в конце видно как он строит форму:

Код

$app->build_page( 'login.tmpl', $param );


Вход через логин форму осуществляет метод do_login.

Форму регистрации вываливает метод - signup, осуществляет регистрацию do_signup.

Замечу сразу что скрипт делает чересчур многое, не только авторизацию и регистрацию. Как стартует скрипт, начальная часть: 

Код

package MT::App::Comments;
use strict;

use base 'MT::App';

use MT::Comment;
use MT::I18N qw( wrap_text );
use MT::Util
    qw( remove_html encode_html encode_url decode_url is_valid_email is_valid_url is_url escape_unicode format_ts encode_js epoch2ts );
use MT::Entry qw(:constants);
use MT::Author;
use MT::JunkFilter qw(:constants);


sub id {'comments'}

sub init {
    my $app = shift;
    $app->SUPER::init(@_) or return;
    $app->add_methods(
        login          => \&login_form,
        login_external => \&login_external,
        do_login       => \&do_login,
        signup         => \&signup,
        do_signup      => \&do_signup,
 
        do_register    => \&do_register,
        preview        => \&preview,
        post           => \&post,
        handle_sign_in => { handler => \&handle_sign_in, charset => 'utf-8' },
        userinfo       => \&userinfo,
        verify_session => \&verify_session,
        edit_profile   => \&edit_commenter_profile,
        save_profile   => \&save_commenter_profile,
        red            => \&do_red,
        generate_captcha => \&generate_captcha,

        start_recover => \&start_recover,
        recover       => \&recover,
        new_pw        => \&new_pw,

        comment_listing => \&comment_listing,

        recover_lockout => 'MT::CMS::User::recover_lockout',
    );
    $app->{template_dir}         = 'comment';
    $app->{plugin_template_path} = '';
    $app->init_commenter_authenticators;
    $app->init_captcha_providers();
    MT->add_callback( 'CommentThrottleFilter', 1, undef,
        \&MT::App::Comments::_builtin_throttle );
    $app;
}



sub init_request {
    my $app = shift;
    $app->SUPER::init_request(@_);
    $app->set_no_cache;
    $app->{default_mode} = 'post';
    my $q = $app->param;

    if ( my $blog_id = $q->param('blog_id') ) {
        if ( $blog_id ne int($blog_id) ) {
            die $app->translate("Invalid request");
        }
    }

    # Global '_type' parameter check; if we get something
    # special character, die
    if ( my $type = $app->param('_type') ) {
        if ( $type =~ /\W/ ) {
            die $app->translate("Invalid request");
        }
    }

    ## We don't really have a __mode parameter, because we have to
    ## use named submit buttons for Preview and Post. So we hack it.
    if (   $q->param('post')
        || $q->param('post_x')
        || $q->param('post.x') )
    {
        $app->mode('post');
    }
    elsif ($q->param('preview')
        || $q->param('preview_x')
        || $q->param('preview.x') )
    {
        $app->mode('preview');
    }
    elsif ($q->param('reply')
        || $q->param('reply_x')
        || $q->param('reply.x') )
    {
        $app->mode('reply');
    }
    elsif ($q->param('reply_preview')
        || $q->param('reply_preview_x')
        || $q->param('reply_preview.x') )
    {
        $app->mode('reply_preview');
    }
    elsif ( $app->path_info =~ /captcha/ ) {
        $app->mode('generate_captcha');
    }
}



Вот сам метод do_signup:

Код

sub do_signup {
    my $app = shift;
    my $q   = $app->param;
         
    return $app->error( $app->translate("Invalid request") )
        if $app->request_method() ne 'POST';

    my $param = {};
    $param->{$_} = $q->param($_)
        foreach qw(blog_id entry_id static email url username nickname return_url  );

    return $app->errtrans("Invalid request")
        unless $param->{blog_id};

    my $blog = $app->model('blog')->load( $param->{blog_id} || 0 )
        or return $app->error(
        $app->translate( 'Cannot load blog #[_1].', $param->{blog_id} ) );

    my $cfg = $app->config;
    if ( my $registration = $cfg->CommenterRegistration ) {
        return $app->handle_error(
            $app->translate('Signing up is not allowed.') )
            unless $registration->{Allow} && $blog->allow_commenter_regist;
    }
    else {
        return $app->handle_error(
            $app->translate('Signing up is not allowed.') );
    }


    my $filter_result = $app->run_callbacks( 'api_save_filter.author', $app );

    return $app->handle_error('Выберите страну') unless $param->{'country'};
    return $app->handle_error('Выберите регион') unless $param->{'state'};
    return $app->handle_error('Выберите город') unless $param->{'town'};

    if($country !~ /^[\d]+$/ ){
     return $app->handle_error('Выберите страну');
    }elsif($state !~ /^[\d]+$/){
    return $app->handle_error('Выберите регион');    
    }elsif($town !~ /^[\d]+$/ ){
    return $app->handle_error('Выберите город');
    }else{}

    my $user;
    $user = $app->create_user_pending($param) if $filter_result;
    unless ($user) {
        my $blog = $app->model('blog')->load( $param->{blog_id} )
            or return $app->error(
            $app->translate( 'Cannot load blog #[_1].', $param->{blog_id} ) );
        if ( my $provider
            = MT->effective_captcha_provider( $blog->captcha_provider ) )
        {
            $param->{captcha_fields} = $provider->form_fields( $blog->id );
        }
        $param->{error} = $app->errstr;
        $param->{ 'auth_mode_' . $app->config->AuthenticationModule } = 1;
        return $app->build_page( 'signup.tmpl', $param );
    }

    ## Assign default role
    $user->add_default_roles;

    my $original = $user->clone();
    $app->run_callbacks( 'api_post_save.author', $app, $user, $original );

    ## Send confirmation email in the background.
    MT::Util::start_background_task(
        sub {
            $app->_send_signup_confirmation( $user->id, $user->email,
                $param->{entry_id}, $param->{blog_id},
                $param->{static} || $param->{return_url} );
        }
    );

    my $entry = MT::Entry->load( $param->{entry_id} )
        if ( $param->{entry_id} );
    if ($entry) {
        my $entry_url = $entry->permalink;
        $app->build_page( 'signup_thanks.tmpl',
            { email => $user->email, entry_url => $entry_url } );
    }
    else {
        $app->build_page(
            'signup_thanks.tmpl',
            {   email => $user->email,
                return_url =>
                    is_valid_url( $param->{return_url} || $param->{static} )
            }
        );
    }
}



При попытке, внести изменения в функцию sign_up ничего не происходит. Пытаюсь вызвать die ничего не происходит. При попытке из этого метода сохранить данные в файл на диске, тоже ничего не происходит. В логах нет ничего. 

Куда копать? Спасибо.



Это сообщение отредактировал(а) Marlik - 24.10.2013, 16:39
PM WWW Skype   Вверх
Marlik
Дата 24.10.2013, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 25.2.2007
Где: Рязань

Репутация: нет
Всего: нет



Все, разобрался, надо при изменениях в скрипте перегружать starman и nginx.
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.