| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Catalyst::Authentication |
| Автор: gcc 27.1.2009, 11:26 | ||||
делаю как в книге, только использую DBI вместе DBIx::Class
ругатеся
модули в системе стоят, эти модули мне нужно поставить в мой проект? то как поставить их с DBI? нигде не написано... чтобы поставить надо знать что такое Session::Store::DBI - это модель, контроллер или view?? на что именнно он ругается? ЗЫ: каталист с певрого раза не очень понравился, так как все равно всё надо переделывать под свои нужны и телепатировать с разработчиками |
| Автор: ginnie 27.1.2009, 12:40 |
| gcc, я, к сожалению, не знаком с Catalyst, поэтому конкретных рекомендаций тебе не дам. Ругается он на Authentication::Store::DBI, т.к. при этом пытается загрузить модуль Catalyst::Plugin::Authentication::Store::DBI, которого нет (в природе |
| Автор: gcc 30.1.2009, 18:46 |
| полностью написано про это тут: http://kobesearch.cpan.org/htdocs/Catalyst-Plugin-Session-Store-DBI/Catalyst/Plugin/Session/Store/DBI.pm.html сейчас делаю по этому http://search.cpan.org/~hkclark/Catalyst-Manual-5.7016/lib/Catalyst/Manual/Tutorial/Authorization.pod http://search.cpan.org/~hkclark/Catalyst-Manual-5.7016/lib/Catalyst/Manual/Tutorial/Authentication.pod только использую DBI |
| Автор: gcc 30.1.2009, 21:40 |
| есть сабж такой http://search.cpan.org/~hkclark/Catalyst-Manual-5.7016/lib/Catalyst/Manual/Tutorial/Authentication.pod#Displaying_Content_Only_to_Authenticated_Users откуда там идут значение c.user_exists и c.user.username в шаблон ? то есть мне нужно вывести активен ли пользователь или нет, но я не ивжу от куда те парамерты взялись ИМХО ( а шаблон не ТТ) ============================== это по-моиму это $c->user( ) http://search.cpan.org/~bobtfish/Catalyst-Plugin-Authentication-0.100092/lib/Catalyst/Plugin/Authentication.pm ЗЫ просто не понятно было где их искать... эти методы |
| Автор: NuINu 31.1.2009, 01:26 |
| объект 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); } |
| Автор: gcc 31.1.2009, 13:14 | ||||
| аномалия какая-то есть код, это файл login.pm
ошибка
почему "login" из param идет в шаблон? шаблон ругается на то что откуда-то взляся login шаблон работатет, тестовые страницы работают |
| Автор: NuINu 31.1.2009, 19:16 |
| где появляется логин видно из трассировки ошибки. 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 код который ты привел не имеет к этому никакого отношения, ошибка связана с работой твоего шаблонизатора... возможно неправильным шаблоном. |
| Автор: gcc 1.2.2009, 18:42 | ||||
| NuINu, спасибо, поставил в самый вверх путь к шаблону, заработало! 1) в книге нашел такую цитату, но не могу понять как ее использовать? к чему это, нужно модуль свой написать для кармы? но как модуль который будет сюда прикрутить?
2) как сделать чтобы была доступаня страница под адрессу http://domain.com/ (без параметров) не могу найти как это сделать, какой это контроллер? 3) есть таблица users, и в ней столбец active, если я хочу, например, написать пользователю что он не активен во всех или нескольих контрллерах, нужно использовать begin : Private или как-то под другому, как правильно? (или тут просто $c->forward($calss,$method) поможет?) 4) не получилось перевети и понять смысл:
что такое :global, :privat и ;local? Args - это массив который идет как param просто парметры /Args[0]/Args[1]/Args[2] sub bar : Path('foo/bar') { } - этот метод будет загружатся если путь такой 'foo/bar' http://search.cpan.org/~hkclark/Catalyst-Manual-5.7016/lib/Catalyst/Manual/Intro.pod#Action_types не могу понять как использовать Catalyst::DispatchType::Chained http://search.cpan.org/~mramberg/Catalyst-Runtime-5.71000/lib/Catalyst/DispatchType/Chained.pm ? |
| Автор: gcc 1.2.2009, 20:00 |
| кстате, если пользователь хочет скрыть какую-то информацию (программно), то целесобразно тут использовать Catalyst::Plugin::Authorization::Roles ? |
| Автор: NuINu 2.2.2009, 23:29 |
| 1: Здесь речь идет уже не о аутентификации(идентификация кто - это), а авторизации(т.е о правах пользователя идентификация - а что ему можно) конкретно правах на основе некоего счетчика - карма - он ведется отдельно, считай как на форуме. так вот при достижении конкретного значения счетчика пользователю открываются некие возможности а именно доступ в /bonus/area 2: Root.pm метод default 3: выясни, прежде всего для себя чего ты хочешь добиться этим полем - актив. либо запрета аутентификации тогда актив имеет занчение 0 и 1. и мы ограничиваем пользователя по маске, либо все, либо ничего. либо мы ограничиваем пользователя в некоторых правах, т.е. в авторизации. тогда это поле может содержать (имя отношение один(пользователь) ко многим (активе)) список ссылок (к которым данный пользователь имеет доступ и некие условные обозначения к примеру NULL и ALL) это будет пример авторизации на основе списков доступа хранящихся персонально для каждого пользователя в базе 4: я пользуюсь гугл переводчиком, думаю он поможет и тебе. global, local .... perldoc Catalyst::Manual::Intro все я спать |
| Автор: gcc 2.2.2009, 23:43 | ||
понтяно при 0 - запретить, при 1 оазрешить я хотел запретить публиковать и разрешить смотреть. Вопрос хотел узнать про то, куда мне это вставить, точнее мне нужно как-то метод в модуле аутентификации переопределить? чтобы не ковырять сам модуль, ну и чтобы дополнительный SQL dbi запрос не делать? |
| Автор: NuINu 3.2.2009, 16:24 |
| так вот, 0 и 1 это разрешить запретить аутентификацию! т.е ригистрацию пользователя. а значит здесь управляем на уровне доступа ко ВСЕМУ ресурсу. то о чем ты говоришь это уже уровень авторизации, т.е управление доступом для АУТЕНТИФИЦИРОВАННЫХ полльзователей. посмотри учебник по Authorization таким образом если делать авторизацию с использованием ролей надо создать роли viewer и editor и соответсвенно присвоить пользователям эти роли. а в контроллерах проверять какую роль играет текущий пользователь. на счет запроса SQL- не надо экономить на спичках. а модуль ковырять и не надо подлючаешь в головном модуле модуль Authorization и все. |
| Автор: gcc 3.2.2009, 16:50 | ||||||
но если у меня этих контроллеров штук 100, в каждом контроллере это менять? тогда переделать модуль который смотрит логин и пароль, чтобы он смотрел сразу остальное... спасибо Добавлено @ 16:54
а гостевую сессию как туда вставить? или не активного пользователя, так наверное
Добавлено @ 16:56 очень много всего в этом каталисте, потерятся можно... вообщем я написал - работает... сейчас буду прикручивать остальое... |
| Автор: gcc 6.2.2009, 02:08 | ||||
подскажите, как вывести имя пользователя?
выводится ссылка на хэш, если написать так
то число 1/8 |
| Автор: gcc 6.2.2009, 02:57 | ||
что такое MyAuth? запутался, как в другом модуле посмотреть отладку? кстате, если отладку вклчить в каиалисе это тоже самое? пробовал так не получается my @pkg = qw(MyApp MyApp::Controller::Root); my @pkg = qw(Root MyApp::Controller::Root); |
| Автор: NuINu 6.2.2009, 09:45 | ||
в шаблоне
я же уже говорил операции user и user_exist добавляются к объекту $c при подключении плагина Authentication Это просто название моего приложения. Глобальный класс. вот так вот как у вас: my @pkg = qw(MyApp MyApp::Controller::Root); должно работать. разве что приложение называется не MyApp ну и поместите эту функцию в тот модуль в котором вы ее вызываете... что то я сомневаюсь что вы ее правльно вызываете... я ее так просто для примера нарисовал. совершенно другое... но я с отладкой не сильно разбирался... вроде я уже писал как выводить отладочные сообщения? кхм... странно.. значит показалось- дежа вю в мануале все написано: $c->log->info("Starting the foreach loop here"); $c->log->debug("Value of \$id is: ".$id); site_perl/5.8.8/Catalyst/Manual/Tutorial/Debugging.pod |
| Автор: gcc 6.2.2009, 13:42 | ||||||
сори, забыл сказать шаблон HTML::Template не работает
|
| Автор: NuINu 6.2.2009, 15:00 | ||
ну делов то смотришь доку: Catalyst::View::HTML::Template там все передельно ясно написано:
таким образом к объекту $c используя данный шаблонизатор ты никогда не обратишься. способов это обойти море! создай переменную в $c->stash->{c} = $c; можешь это сделать в методе Root::end или просто создай(т.к я не уверен что в этом шаблонизаторе будут вызываться методы) $c->stash->{user_exists} = $c->user_exists; $c->stash->{username} = $c->user->username; |
| Автор: gcc 6.2.2009, 15:20 | ||||||
| метода $c->user->username нету это работает: (0 или 1)
это возвращает ссылку на хеш, не знаю что с ней делать, при разыменовании ключ и значение: число 1/8
отлдаку опять не получилось сделать, не знаю что это за хэш...
пробую делать отладку... |
| Автор: NuINu 6.2.2009, 15:30 |
ну пардон, это может быть хешь $c->user->{username} делов то распечатай отладку $c->log->debug(Dumper($c)); |
| Автор: gcc 6.2.2009, 15:38 | ||||
вот отладка
должно быть так
но ничего не выводит, пустое значение... |
| Автор: NuINu 6.2.2009, 20:13 |
| ну, вывел в отладку то ты что? какую переенную? хочешь сказать что я это из воздуха взял? 'username' => 'test01' - из вывода твоей же отладки. ищите и обрящете! |
| Автор: gcc 6.2.2009, 22:54 | ||||
в том и проблема что должно работаеть, но не хочет выводить
что делать дальше, как вывести? я что-то перепутал? |
| Автор: NuINu 7.2.2009, 12:09 |
| $c->stash->{user_username} = $c->user->username; на будущее, вас ни кто не заставлял выбирать нестандартный путь - HTML::Template, это ваш выбор, ну раз так, будте готовы приложить немного больше усилий для освоения этого пути, чем другие. первопроходцам всегда трудно. нехотите проблем или нет сил по для их преодоления выбирайте майнстрим. |
| Автор: gcc 7.2.2009, 14:56 | ||||
скажите пожалуйста, где вы увидели метод username ? метода нету
вопрос тот же, как разыменовать и получить имя пользователя? |
| Автор: KSURi 7.2.2009, 15:34 |
| gcc, за время пока вы обсуждаете один вопрос, уже можно было открыть исходник модуля и посмотреть все нужные методы. |
| Автор: gcc 7.2.2009, 15:37 |
| KSURi, я перепробывал все методы которые написаны в документаиции к модулю ( я про это писал) а в отладке написано совсем другое... то что в документации нету... хэш видно в отладке с именем пользователя 'test01', не получается его разыменовать... |
| Автор: NuINu 7.2.2009, 18:31 |
у меня этот медод есть. просто я использую другой класс Catalyst::Authentication::Store::RDBO::User связанный с ORM Rose в вашем случае Catalyst::Authentication::Store::DBI::User конечно его может и не быть. мой промах. ну тем не менее, попробовать разименовать уже то что вы получили в отладке то можно? там же есть переменная к которой можно обратиться, так в чем же дело? дамп чего вы там вывели? $c->user-? тогда так: $c->stash->{user_username} = $c->user->{user}->{username}; KSURi, посмотреть порблематично, дело в том что методы ацессоры добавляются прямо во время выполнения. и зависят от (в моем случае) от описания полей класса. gcc, а вы пробуйте, пробуйте. |
| Автор: KSURi 7.2.2009, 19:12 |
| gcc, документация может быть неполной. Поэтому я и написал, что можно заглянуть в исходники. NuINu, я так и думал. Но тема уже неделю в топе, думаю за это время можно было найти место где создаются аксессоры. |
| Автор: gcc 7.2.2009, 19:22 | ||||
| в исходниках модуля Catalyst::Authentication::Store::DBI и Catalyst::Authentication::Store::DBI::User, и по остальным, есть только два метода sub from_session sub find_user в котором идет работа с БД и все один запрос в каждом метода, дальше я не вижу где тот метода откуда берется имя пользователя, остается один вариант - только разыменовать из отладки (или нет?) но я не знаю где это смотреть... Добавлено @ 19:22
извените. забыл сказать, дампером $c->user |
| Автор: gcc 7.2.2009, 19:42 | ||
работает
|
| Автор: gcc 20.2.2009, 17:12 | ||
почему данный код админа не пускает? он пишет что длступ запрещен, то есть всем запрещает доступ, странно... я хотел разрешить вход в 2 раздела только админу, все остальное всем разрешить... |
| Автор: gcc 23.2.2009, 10:15 |
| кучу времени потратил, нифига не нашел... в общем он в тупую не пускает того пользователя которого должен... или я что-то не понял? в общем логично написать чтобы запретить всем крмое админа... кто как делал? |
| Автор: NuINu 23.2.2009, 11:37 |
| admin это кто? пользователь? а какие у него роли определены? в правилах указываются РОЛИ |
| Автор: gcc 23.2.2009, 12:18 | ||||
1) admin это пользователь роли id 1
2) как мне запретить чтобы пользователи не заходили туда где у них нет "ролей"? потому что роли не реагируют.... |
| Автор: gcc 24.2.2009, 07:33 | ||||||||
id: 1 username: admin
какую именно документацию? документации под DBI мало http://search.cpan.org/~janus/Catalyst-Authentication-Store-DBI-0.01/lib/Catalyst/Authentication/Store/DBI.pm http://search.cpan.org/~bricas/Catalyst-Plugin-Authorization-Roles-0.07/lib/Catalyst/Plugin/Authorization/Roles.pm тут http://search.cpan.org/~hkclark/Catalyst-Manual-5.7016/lib/Catalyst/Manual/Tutorial/Authentication.pod#___top если точно, то в документации есть про DBIC, это не надо тут описано для другой таблицы! http://search.cpan.org/~janus/Catalyst-Authentication-Store-DBI-0.01/lib/Catalyst/Authentication/Store/DBI.pm я поставил
все правильно? я хотел спросить: перед тем как разрешать доступ, нужно доступ запретить всем зарегиритрированным? (именно это не написано в документации) я поставил эти роли, но оно не запрещает просто, не реагирует, забивает на эти роли. (я выделил жирным чтобы было видно главный вопрос) если вы делали, то скажите как сделать чтобы они реагировали? я не вижу где написано в документации чтобы запретить тем у кого нету ролей, повторяю: я добавил роли - не реагирует... |
| Автор: gcc 24.2.2009, 09:30 |
| http://search.cpan.org/~mramberg/Catalyst-Plugin-Authentication-CDBI-0.10/CDBI.pm этот модуль мне не нужен? |
| Автор: gcc 24.2.2009, 11:59 |
| уровни доступа без mysql работают!! но как настроить Catalyst::Authentication::Store::DBI ? чтобы эти роли ставить в таблицы СУБД? NuINu, а можно как-то проверить работает ли этот модуль Catalyst::Authentication::Store::DBI ? |
| Автор: NuINu 24.2.2009, 13:13 | ||||
не нужно. ну я тебя поздравляю.
можно. просто вставь в него отладочный вывод... или просто активизируй его внутреннюю отладку(она наверняка есть). а тут я тебе помочь не могу, я использовал другой модуль для авторизации. тут на конфе парень рекламировал irc сходи к ним может там кто этот модуль пользовал. |
| Автор: gcc 18.3.2009, 07:37 | ||||||||||
| ныжно посмотреть id пользователя в котрого активная сессия, и тот который работает например:
но если пользователь 'гость' то выдается ошибка
приходиться писать так:
не карсиво и не удоюно, в исходниках я не нашле ничего, не полдучилось пробовал сделать так: (не работает)
нашел сам метод
в DBIx::Class или в Rose: |
| Автор: NuINu 18.3.2009, 10:40 | ||||||
данная ошибка:
это не проблема Rose или DBIx, она вообще к ним никакого отношения не имеет. у меня, ВСЕГДА проверяется if ($c->user_exists()) и делается это не везде, а в одном месте контроллер Root метод auto тебе надо лучше изучать примеры которые идут с каталистом, ты проскакал галопом по европам, а теперь на ерунде спотыкаешься.
например в данном коде, можно не авторизированного пользователя который не выполнил логин, определить, присвоить ему значение user - гость, а уже у данного пользователя в базе прав должна быть РОЛЬ - гость. и уже весь остальной код должен работать только с ролями(ну вернее может работать) это будет автоматическая аутентификация(псевдо аутентификация, ведь о пользователе мы при этом ничего не узнали) но эта модель позволит нам работать с ним как с обычным аутентифицированным пользователем. а у тебя получается пользователь не прошедший аутентификацию уже кудато лезет на сайт, и ты ему это делать разрешаешь, в результате чего приходиться везде проверять а есть ли такой пользователь. ну это логично. если так делать то надо проверять сначала пользователя, а уж после этого его права. уж сам выбирай как делать. |
| Автор: gcc 18.3.2009, 11:25 | ||||
не вижу, где там это написано, http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.pod http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authorization.pod покажи пожалуйста, как это сделать, присвоить "гостью" имя? или надо как-то принудительно написать? ну вот часть кода, то есть лишниый раз над писать if ($c->user_exists()) {
|
| Автор: NuINu 18.3.2009, 11:37 | ||
| вот именно про это там действительно не написано, это просто мое предложение заводишь пользователя nobody заводишь роль guest присваиваешь роль пользователю nobody->guest пишешь приблизительно такой код в контролере Root:
|
| Автор: gcc 20.3.2009, 09:46 | ||||
| NuINu, можете подсказать зачем сделан Privat? зачем его используют кроме как в root.pm? это тоже самое что приватный метод??
я вот вроде бы все разобрался из документации, но кроме этого Privat... Local - это например helo : Local будет братся из URL /helo/ вот например, я не понимаю зачем там 2 метода captcha_uri : Private и check_captcha : Private с Privat, и как они вызываються и где? (если приватный - значить замкнутный? но я не вижу чтобы он в том контроллере вызывался) http://github.com/jrockway/angerwhale/blob/95da08ea31d2005de3b21f93049e89ffcc0ffaf7/lib/Angerwhale/Controller/Captcha.pm
|
| Автор: NuINu 20.3.2009, 11:30 | ||||
не могу здесь блеснуть какими то глубокими знаниями, тем более что сейчас занимаюсь OpenGL ну давай попытаюсь выдать хоть какую то идею. может это подтолкнет тебя к правильному пониманию, в крайнем случае у ребят с Москов.пм. можно спросить. они каталистники Первым делом адресую тебя к Catalyst::Manual::Intro там описывается все что связанно с диспетчеризацией сообщений. в том числе и типы действий. итак акция(действие) как оно поределено: An action is a subroutine with a special attribute. т.е метод с неким атрибутом. что уже делает его отличным от обычных методов класса. как скрытых так и нет. Именно этот "некий атрибут" делает из метода - Action(действие) которое в последствии окружение каталиста становиться способным воспринимать в контектсте данного контроллера. Т.е класс имеющего помимо обычных методов, еще и методы-действия. данные методы-действия добавляются в список методов которые будут потом проверяться при диспетчиризации запроса пользователя и диспетчиризации событий вызванных не пользователем а другими методами-действиями. так вот методы-действия класса Private отличаются только тем(от других методов действий) что не могут быть непосредственно вызваны пользователями(в качестве урла их нельзя указать). зато их можно использовать при вызове фукнций деспетчеризации каталиста, таких как форвард. собственно пример как это делать там есть:
обычные же методы класса не доступны для диспетчиризации событий через систему каталиста. тем более недоступны методы с двума подчеркиваниями. |
| Автор: gcc 20.3.2009, 12:02 |
| спасибо понял, в том примере в котором я показывал те 2 метода вызвались в другом контроллере просто... мне показалсоь что это что-то другое |
| Автор: gcc 20.3.2009, 12:02 |
| спасибо понял, в том примере в котором я показывал те 2 метода вызвались в другом контроллере просто... мне показалсоь что это что-то другое |
| Автор: shootnix 15.6.2009, 10:36 | ||||
| У меня проблема та же, что и в сабже. Не подскажете, как вы ее решили? пишу так:
При вызове метода из плугина выдает вот это:
Вижу, что грабли с коннектом к базе, но сама модель у меня DBI и настроена. Куда копать? UPD Вопрос снимается, нашел косяк, покопавшись в исхониках — имя модели задано жестко DBI, у меня другое было |