[Cascavel-pm] Catalyst: Autentication

Ednardo Lobo ednardo em lobo.eti.br
Quinta Maio 27 03:55:50 PDT 2010


Giuliani,

Ajustei meu "realm" para:

<Plugin::Authentication>
     default_realm default
     <realms>
         <default>
             <credential>
                 class Password
                 password_field password
                 password_type clear
             </credential>
             <store>
                 class DBIx::Class
                 user_model sgle::Schema::User
                 role_relation roles
                 role_field role
             </store>
         </default>
     </realms>
</Plugin::Authentication>

Não consegui, entretanto, compreender o que é exatamente o "user_model", 
  cuja definição extraída do manual reproduzo a seguir:

------------------------------------------------------------------------
user_model

Contains the model name (as passed to $c->model()) of the DBIx::Class 
schema to use as the source for user information. This config item is 
REQUIRED.

(Note that this option used to be called user_class. user_class is still 
functional, but should be used only for compatibility with previous 
configs. The setting called user_class on other authentication stores is 
present, but named store_user_class in this store)
------------------------------------------------------------------------

Informei, porém, a classe que refere-se ao esquema da minha tabela de 
usuários onde fica registrado o "username" e "password", veja:

------------------------------------------------------------------------
__PACKAGE__->load_components("Core");
__PACKAGE__->table("user");
__PACKAGE__->add_columns(
   "id",
   { data_type => "INT", default_value => undef, is_nullable => 0, size 
=> 11 },
   "username",
   {
     data_type => "TEXT",
     default_value => undef,
     is_nullable => 1,
     size => 65535,
   },
   "password",
   {
     data_type => "TEXT",
     default_value => undef,
     is_nullable => 1,
     size => 65535,
   },
   "email_address",
   {
     data_type => "TEXT",
     default_value => undef,
     is_nullable => 1,
     size => 65535,
   },
   "first_name",
   {
     data_type => "TEXT",
     default_value => undef,
     is_nullable => 1,
     size => 65535,
   },
   "last_name",
   {
     data_type => "TEXT",
     default_value => undef,
     is_nullable => 1,
     size => 65535,
   },
   "active",
   { data_type => "INT", default_value => undef, is_nullable => 1, size 
=> 11 },
);

__PACKAGE__->set_primary_key("id");

__PACKAGE__->has_many(user_roles => 'sgle::Schema::UserRole', 'user_id');
__PACKAGE__->many_to_many(roles => 'user_roles', 'role');
------------------------------------------------------------------------

Entretanto, quando a ação "Controller::Login" é tomada apenas a tabela 
'role' é acessada, veja:

------------------------------------------------------------------------
SELECT me.id, me.role FROM role me
------------------------------------------------------------------------

E não consegui descobrir a razão disto. Esperava que tabela 'user' 
também fosse acessada.

Onde estou errando?


Grato,


Giuliani Sanches escreveu:
> Em 26 de maio de 2010 14:33, Ednardo Lobo <ednardo em lobo.eti.br> escreveu:
>> Giuliani,
>>
>> O "default realm" está configurado, veja:
>>
>> - sgle.conf
>>
>> <Plugin::Authentication>
>>    <default>
>>        password_type   clear
>>        user_model   DB::User
>>        class   SimpleDB
>>    </default>
>> </Plugin::Authentication>
>>
>>
>> Li o artigo e a documentação que indicou, mas não ajudaram.
>>
>> Alguma outra sugestão?
>>
>>
>> Grato,
>>
>> Giuliani Sanches escreveu:
>>> 2010/5/26 Ednardo Lobo <ednardo em lobo.eti.br>:
>>>> Pessoal,
>>>>
>>>> Estou testando o módulo Catalyst::Plugin::Autentication e não estou
>>>> conseguindo identificar a origem do erro:
>>>>
>>>> --------------
>>>> Caught exception in sgle::Controller::Login->index "authenticate called
>>>> with
>>>> nonexistant realm: 'default'. at
>>>>
>>>> /home/ftp/www/lobosnet.cjb.net/sgle/script/../lib/sgle/Controller/Login.pm
>>>> line 30"
>>>> --------------
>>>>
>>>> Isso ocorre quando a seguinte ação é tomada:
>>>>
>>>> - Login.pm
>>>>
>>>> sub index :Path :Args(0) {
>>>>   my ( $self, $c ) = @_;
>>>>
>>>>   my $u = $c->req->params->{username};
>>>>   my $p = $c->req->params->{password};
>>>>
>>>>   if ($u && $p) {
>>>>       if ($c->authenticate({username => $u, password => $p})) {
>>>>           $c->res->redirect('Welcome');
>>>>       }
>>>>       else {
>>>>           $c->stash(error_msg => "Bad username or password.");
>>>>       }
>>>>   }
>>>>   else {
>>>>       $c->stash(error_msg => "Empty username or password.");
>>>>   }
>>>> }
>>>>
>>>>
>>>> Qualquer palpite é bem-vindo!
>>>>
>>>>
>>>> Grato,
>>>
>>> Hum.. a mensagem deixa bem claro que faltou configurar o realm default.
>>>
>>> Da uma olhada no primeiro exemplo da documentação do plugin:
>>>
>>>
>>> http://search.cpan.org/~flora/Catalyst-Plugin-Authentication-0.10016/lib/Catalyst/Plugin/Authentication.pm#EXAMPLE
>>>
>>> Tem também esse ótimo artigo do Wallace Reis no sao-paullo.pm.org:
>>>
>>> http://sao-paulo.pm.org/artigo/2010/AutenticacaoCatalyst
>>>
>>> []'s
> 
> 
> Senti falta do Credential e Store na sua configuração.
> 
> http://search.cpan.org/~flora/Catalyst-Plugin-Authentication-0.10016/lib/Catalyst/Plugin/Authentication.pm#Credential_Verifiers
> 
> []'s
> 


-- 
     Ednardo Lobo

     www.lobo.eti.br


Mais detalhes sobre a lista de discussão Cascavel-pm