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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Catalyst::Authentication 
:(
    Опции темы
gcc
Дата 27.1.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



делаю как в книге, только использую DBI вместе DBIx::Class

Код

use Catalyst qw/ConfigLoader Static::Simple
                Session Session::State::Cookie Session::Store::DBI
                Authentication
                Authentication::Store::DBI
                Authentication::Credential::Password
                           Authorization::Roles
                           Authorization::ACL/;
# setup sessions, authorization, and authentication
## ACL rules
__PACKAGE__->deny_access_unless('/admin', [qw/admin/]);


ругатеся 
Код

perl script/myapp_server.pl
Can't locate Catalyst/Plugin/Authentication/Store/DBI.pm in @INC 
(@INC contains: /home/x0/data/www/MyApp/script/../lib /usr/local/lib/perl5/5.8.8/BSDPAN
 /usr/local/lib/perl5/site_perl/5.8.8/mach /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl 
/usr/local/lib/perl5/5.8.8/mach /usr/local/lib/perl5/5.8.8 .) at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/Utils.pm line 270.
Compilation failed in require at script/myapp_server.pl line 55.


модули в системе стоят, эти модули мне нужно поставить в мой проект? то как поставить их с DBI?  нигде не написано...

чтобы поставить надо знать что такое Session::Store::DBI - это модель, контроллер или view??

на что именнно он ругается?

ЗЫ: каталист с певрого раза не очень понравился, так как все  равно всё надо переделывать под свои нужны и телепатировать с разработчиками






Это сообщение отредактировал(а) gcc - 27.1.2009, 11:45
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 27.1.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



gcc, я, к сожалению, не знаком с Catalyst, поэтому конкретных рекомендаций тебе не дам. Ругается он на Authentication::Store::DBI, т.к. при этом пытается загрузить модуль Catalyst::Plugin::Authentication::Store::DBI, которого нет (в природе  smile).


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 30.1.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



полностью написано про это тут:
http://kobesearch.cpan.org/htdocs/Catalyst...ore/DBI.pm.html



сейчас делаю по этому
http://search.cpan.org/~hkclark/Catalyst-M...thorization.pod
http://search.cpan.org/~hkclark/Catalyst-M...hentication.pod

только использую DBI


Это сообщение отредактировал(а) gcc - 30.1.2009, 21:07
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 30.1.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



есть сабж такой 

http://search.cpan.org/~hkclark/Catalyst-M...enticated_Users

откуда там идут значение  c.user_exists и c.user.username в шаблон ?

то есть мне нужно вывести активен ли пользователь или нет, но я не ивжу от куда те парамерты взялись ИМХО ( а шаблон не ТТ)


==============================

это по-моиму это $c->user( )

http://search.cpan.org/~bobtfish/Catalyst-...thentication.pm

ЗЫ просто не понятно было где их искать... эти методы

Это сообщение отредактировал(а) gcc - 31.1.2009, 00:13
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 31.1.2009, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



объект c или Сatalyst в ТТ, 
это и есть объект класса приложение к примеру MyApp (из примера)

там есть строчка 
 use Catalyst qw/
.....
           Authentication
......

это добавляет плагин Catalyst::Plugin::Authentication к классу приложеня MyApp
в нем есть куча методов и в частности
user
user_exists

да, а уже то что возврящает user имеест свой метод username(а может это всего лишь поле в хеше)

но вообще говоря архитектура опирается на иделологию класса Class - довольно таки сложная.
я не доконца еще в ней разобрался.

думаю если вы вставите в пример MyAuth Books.pm
след код, получите массу разнообразной информации
#для очень крутой отладки!
use Devel::Symdump;
use Data::Dumper;
sub d1 : Private {
        my $c = shift;
        # !!!!!!!!!!!!! ниже указать Название класса приложения!!!!!!!!!!!!
        my @pkg = qw(MyAuth Catalyst::Plugin::Authentication);
        my $obj = Devel::Symdump->rnew(@pkg);

        print "Scalars:\n";
        my @array = $obj->scalars;
        foreach (@array) {
            print "$_\n";
        }

        print "Arrays:\n";
        @array = $obj->arrays;
        foreach (@array) {
            print "$_\n";
        }

        print "\nHashes:\n";
        @array = $obj->hashes;
        foreach (@array) {
            print "$_\n";
        }

        print "\nFunction:\n";
        @array = $obj->functions;
        foreach (@array) {
            print "$_\n";
        }
        print "\n------------------------------------------\n";
        print Dumper($c);
        print "\n------------------------------------------\n";


}

sub list : Local {
    my ($self, $c) = @_;
    $c->stash->{books} = $c->model('Book')->{manager}->get_books(
                                        sort_by => ['title'],       );
    $c->stash->{template} = 'books/list.tt2';

    d1($c);
}

PM MAIL   Вверх
gcc
Дата 31.1.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



аномалия какая-то

есть код, это файл login.pm

Код

   sub index :Path :Args(0) {
    my ( $self, $c ) = @_;

        # Get the username and password from form
        my $username = $c->request->params->{username} || "";
        my $password = $c->request->params->{password} || "";
    
        # If the username and password values were found in form
        if ($username && $password) {
            # Attempt to log the user in
            if ($c->authenticate({ username => $username,
                                   password => $password  } )) {
                # If successful, then let them use the application
                $c->response->redirect($c->uri_for('/database'));
                return;
            } else {
                # Set an error message
               $c->stash->{template} = '/home/data/www/MyApp/root/login.tt';
                $c->stash->{error_msg} = "Bad username or password.";
            }
        }
   
        # If either of above don't work out, send to the login page
}


ошибка
Код

Caught exception in MyApp::View::HTML::Template->process "HTML::Template->new() : Cannot open included file login :
 file not found. at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1658
    HTML::Template::_init_template('HTML::Template=HASH(0x9af7d10)') called at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1238
    HTML::Template::_init('HTML::Template=HASH(0x9af7d10)') called at /usr/local/lib/perl5/site_perl/5.8.8/HTML/Template.pm line 1124
    HTML::Template::new('HTML::Template', 'filename', 'login', 'path', 'ARRAY(0x9a9ed6c)', 'die_on_bad_params', 0, 'cache', 1, ...) 
called at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/View/HTML/Template.pm line 96
    Catalyst::View::HTML::Template::render('MyApp::View::HTML::Template=HASH(0x9799994)', 'MyApp=HASH(0x9b1e488)', 'login') called
 at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/View/HTML/Template.pm line 59



почему "login" из param идет в шаблон? шаблон ругается на то что откуда-то взляся login

шаблон работатет, тестовые страницы работают


Это сообщение отредактировал(а) gcc - 31.1.2009, 13:22
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 31.1.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



где появляется логин видно из трассировки ошибки.

Caught exception in MyApp::View::HTML::Template->process "HTML::Template->new() : Cannot open included file login :

Catalyst::View::HTML::Template::render('MyApp::View::HTML::Template=HASH(0x9799994)', 'MyApp=HASH(0x9b1e488)', 'login') called at /usr/local/lib/perl5/site_perl/5.8.8/Catalyst/View/HTML/Template.pm line 59

код который ты привел не имеет к этому никакого отношения, ошибка связана с работой твоего шаблонизатора... возможно неправильным шаблоном.

PM MAIL   Вверх
gcc
Дата 1.2.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



NuINu, спасибо, поставил в самый вверх путь к шаблону, заработало!


1) в книге нашел такую цитату, но не могу понять как ее использовать?
к чему это, нужно модуль свой написать для кармы? но как модуль который будет сюда прикрутить?
Код

If you prefer not to use roles, you can also use an arbitrary subroutine:
    __PACKAGE__->allow_access_if(
        '/bonus/area',
                   sub { my ($c, $action) = @_;
                 if($c->user->karma > 50){
                       return $ALLOWED
                 }
                 else {
                       return $DENIED
                 }
               }
         );
Here we allow access to /bonus/area only if the user has a karma (as defined by the
user object) greater than 50. Otherwise, the /access_denied action is run instead.


2) как сделать чтобы была доступаня страница под адрессу http://domain.com/ (без параметров)
не могу найти как это сделать, какой это контроллер? smile

3) есть таблица users, и в ней столбец active, если я хочу, например, написать пользователю что он не активен во всех или нескольих контрллерах, нужно использовать begin : Private или как-то под другому, как правильно? 

(или тут просто $c->forward($calss,$method) поможет?)


4) не получилось перевети и понять смысл:
Цитата

# Top-level (Global)

    package MyApp::Controller::Foo;
    sub foo : Global { }

Matches http://localhost:3000/foo. The function name is mapped directly to the application base. You can provide an equivalent function in this case by doing the following:

    package MyApp::Controller::Root
    sub foo : Local { }

# Namespace-Prefixed (Local)

    package MyApp::Controller::My::Controller; 
    sub foo : Local { }

Matches http://localhost:3000/my/controller/foo.

This action type indicates that the matching URL must be prefixed with a modified form of the component's class (package) name. This modified class name excludes the parts that have a pre-defined meaning in Catalyst ("MyApp::Controller" in the above example), replaces "::" with "/", and converts the name to lower case. See "Components" for a full explanation of the pre-defined meaning of Catalyst component class names.

Note that actions with the :Local attribute are equivalent to the <:Path('action_name') > so sub foo : Local { } is equivalent to -

    sub foo : Path('foo') { }

# Private

    sub foo : Private { }

Matches no URL, and cannot be executed by requesting a URL that corresponds to the action key. Catalyst's :Private attribute is exclusive and doesn't work with other attributes (so will not work combined with Path or Chained attributes). With the exception of the index , auto and default actions, Private actions can only be executed from inside a Catalyst application, by calling the forward or detach methods:

    $c->forward('foo');
    # or
    $c->detach('foo');

See "Flow Control" for a full explanation of forward. Note that, as discussed there, when forwarding from another component, you must use the absolute path to the method, so that a private bar method in your MyApp::Controller::Catalog::Order::Process controller must, if called from elsewhere, be reached with $c->forward('/catalog/order/process/bar').


что такое :global, :privat и ;local?

Args - это массив который идет как param просто парметры /Args[0]/Args[1]/Args[2]
sub bar : Path('foo/bar') { } - этот метод будет загружатся если путь такой 'foo/bar'

http://search.cpan.org/~hkclark/Catalyst-M...od#Action_types

не могу понять как использовать Catalyst::DispatchType::Chained  http://search.cpan.org/~mramberg/Catalyst-...Type/Chained.pm ?




Это сообщение отредактировал(а) gcc - 1.2.2009, 19:19
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 1.2.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



кстате, если пользователь хочет скрыть какую-то информацию (программно), то целесобразно тут использовать Catalyst::Plugin::Authorization::Roles  ?

Это сообщение отредактировал(а) gcc - 1.2.2009, 20:00
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 2.2.2009, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1: Здесь речь идет уже не о аутентификации(идентификация кто - это), а авторизации(т.е о правах пользователя идентификация - а что ему можно)
конкретно правах на основе некоего счетчика - карма - он ведется отдельно, считай как на форуме.
так вот при достижении конкретного значения счетчика пользователю открываются некие возможности а именно доступ в /bonus/area

2: Root.pm метод default

3: выясни, прежде всего для себя чего ты хочешь добиться этим полем - актив. либо запрета аутентификации тогда актив имеет занчение 0 и 1. и мы ограничиваем пользователя по маске, либо все, либо ничего.
либо мы ограничиваем пользователя в некоторых правах, т.е. в авторизации.
тогда это поле может содержать (имя отношение один(пользователь) ко многим (активе)) список ссылок (к которым данный пользователь имеет доступ и некие условные обозначения к примеру NULL и ALL)
это будет пример авторизации на основе списков доступа хранящихся персонально для каждого пользователя в базе

4:  я пользуюсь гугл переводчиком, думаю он поможет и тебе. 
global, local .... perldoc Catalyst::Manual::Intro

все я спать smile
PM MAIL   Вверх
gcc
Дата 2.2.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Цитата(NuINu @ 2.2.2009,  23:29)

3: выясни, прежде всего для себя чего ты хочешь добиться этим полем - актив. либо запрета аутентификации тогда актив имеет занчение 0 и 1. и мы ограничиваем пользователя по маске, либо все, либо ничего.
либо мы ограничиваем пользователя в некоторых правах, т.е. в авторизации.
тогда это поле может содержать (имя отношение один(пользователь) ко многим (активе)) список ссылок (к которым данный пользователь имеет доступ и некие условные обозначения к примеру NULL и ALL)
это будет пример авторизации на основе списков доступа хранящихся персонально для каждого пользователя в базе


понтяно при 0 - запретить, при 1 оазрешить

я хотел запретить публиковать и разрешить смотреть. Вопрос хотел узнать про то, куда мне это вставить, точнее мне нужно как-то метод в модуле аутентификации переопределить? чтобы не ковырять сам модуль, ну и чтобы дополнительный SQL dbi запрос не делать?

Это сообщение отредактировал(а) gcc - 2.2.2009, 23:49
PM WWW ICQ Skype GTalk Jabber   Вверх
NuINu
Дата 3.2.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



так вот, 0 и 1 это разрешить запретить аутентификацию! т.е ригистрацию пользователя. а значит здесь управляем на уровне доступа ко ВСЕМУ ресурсу.

то о чем ты говоришь это уже уровень авторизации, т.е управление доступом для АУТЕНТИФИЦИРОВАННЫХ полльзователей.

посмотри учебник по Authorization smile он следующий за аутентификцией.

таким образом если делать авторизацию с использованием ролей
надо создать роли viewer и editor
и соответсвенно присвоить пользователям эти роли.
а в контроллерах проверять какую роль играет текущий пользователь.

на счет запроса SQL- не надо экономить на спичках.

а модуль ковырять и не надо подлючаешь в головном модуле модуль Authorization и все.
PM MAIL   Вверх
gcc
Дата 3.2.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Цитата(NuINu @ 3.2.2009,  16:24)
пользователям эти роли.
а в контроллерах проверять какую роль играет текущий пользователь.

но если у меня этих контроллеров штук 100, в каждом контроллере это менять?

тогда переделать модуль который смотрит логин и пароль, чтобы он смотрел сразу остальное... спасибо

Добавлено @ 16:54
Цитата(NuINu @ 3.2.2009,  16:24)
надо создать роли viewer и editor
и соответсвенно присвоить пользователям эти роли.

а гостевую сессию как туда вставить? или не активного пользователя, так наверное

Код

    __PACKAGE__->allow_access_if(
        '/bonus/area',
                   sub { my ($c, $action) = @_;
                 if($c->user->karma > 50){
                       return $ALLOWED
                 }
                 else {
                       return $DENIED
                 }
               }
         );


Добавлено @ 16:56

очень много всего в этом каталисте, потерятся можно... вообщем я написал - работает... сейчас буду прикручивать остальое...

Это сообщение отредактировал(а) gcc - 3.2.2009, 17:01
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 6.2.2009, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



подскажите, как вывести имя пользователя?

Код

 $c->stash->{user_username} = $c->user( );    


выводится ссылка на хэш, если написать так 
Код

 $c->stash->{user_username} = values %{$c->user( )} ;   

то число 1/8


Это сообщение отредактировал(а) gcc - 6.2.2009, 03:26
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 6.2.2009, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


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

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



Цитата(NuINu @ 31.1.2009,  01:26)


        # !!!!!!!!!!!!! ниже указать Название класса приложения!!!!!!!!!!!!
        my @pkg = qw(MyAuth Catalyst::Plugin::Authentication);
        my $obj = Devel::Symdump->rnew(@pkg);

    


что такое MyAuth?

запутался, как в другом модуле посмотреть отладку? 

кстате, если отладку вклчить в каиалисе это тоже самое?

пробовал так не получается
        my @pkg = qw(MyApp MyApp::Controller::Root);
        my @pkg = qw(Root MyApp::Controller::Root);

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


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

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


 




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


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

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