• Publicidad

Incluir código generado en una página HTML

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Incluir código generado en una página HTML

Notapor fjmn2001 » 2009-07-15 16:55 @746

Saludos, les escribo nuevamente porque tengo una inquietud y he buscado bastante información por Internet y no sale nada claro pues, o por lo menos yo no lo he encontrado.

Yo estoy haciendo una página que requiere autenticación de usuarios bajo Perl, entonces conseguí un ejemplo sencillo de cómo lograrlo en una página distinta así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. #
  4. # Sample application
  5. #
  6. # Just place this file in a CGI enabled part of your website, and
  7. # load it up in your browser. The only valid username/password
  8. # combination is 'test' and '123'.
  9. #
  10.  
  11. use strict;
  12. use warnings;
  13.  
  14. {
  15.  
  16.     package SampleLogin;
  17.  use base qw(CGI::Application);
  18.  
  19.     use CGI::Application::Plugin::Session;
  20.     use CGI::Application::Plugin::Authentication;
  21.     use CGI::Application::Plugin::AutoRunmode;
  22.     use CGI::Carp qw(fatalsToBrowser);
  23.  
  24.     my %config = (
  25.         DRIVER => [ 'Generic', { test => '123' } ],
  26.         STORE => 'Cookie',
  27.         LOGOUT_RUNMODE => 'one',
  28.         LOGIN_FORM => {
  29.     TITLE              => 'Ingreso al Sistema',
  30.     USERNAME_LABEL     => 'Usuario',
  31.     PASSWORD_LABEL     => 'Clave',
  32.     SUBMIT_LABEL       => 'Ingresar',
  33.     REMEMBERUSER_OPTION=> 0,
  34.     COMMENT            => 'Por Favor, Ingrese Su Usuario y Clave',
  35.     INVALIDPASSWORD_MESSAGE=> 'Usuario o Clave Incorrectos',
  36.     BASE_COLOUR        => 'GRAY',
  37.     LIGHTER_COLOUR     => '#F2F2F2',
  38.     DARK_COLOUR        => '50%',
  39.                       }
  40.         );
  41.     SampleLogin->authen->config(%config);
  42.     SampleLogin->authen->protected_runmodes('two');
  43.  
  44.     sub setup {
  45.         my $self = shift;
  46.         $self->start_mode('one');
  47.     }
  48.  sub one : Runmode {
  49.         my $self = shift;
  50.  
  51.         return CGI::start_html( -style => { -code => $self->authen->login_styles } )
  52.           . CGI::h2('This page is NOT protected')
  53.           . CGI::a( { -href => '?rm=two' }, 'Protected Runmode' )
  54.           . CGI::end_html();
  55.     }
  56.  
  57.     sub two : Runmode {
  58.         my $self = shift;
  59.  
  60.         return CGI::start_html( -style => { -code => $self->authen->login_styles } )
  61.           . CGI::h2('This page is protected')
  62.           . CGI::h2( 'username: ' . $self->authen->username )
  63.           . CGI::a( { -href => '?rm=one' }, 'Un-Protected Runmode' )
  64.           . CGI::br()
  65.           . CGI::a( { -href => '?authen_logout=1' }, 'Logout' )
  66.           . CGI::end_html();
  67.     }
  68. }
  69. SampleLogin->new->run;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Este es el ejemplo, funciona muy bien, pero yo quiero que este formulario esté dentro de una tabla en una página principal... ¿¿¿es eso posible??? ¿¿¿podrían ayudarme???
Última edición por explorer el 2009-07-16 07:51 @368, editado 3 veces en total
Razón: Recuerda usar la función para colorear tu código
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Publicidad

Re: Problema con CGI::Application::Plugin::Authentication

Notapor explorer » 2009-07-15 18:56 @830

Pues sí, con las funciones que hay dentro del módulo CGI, como ves en el código.

Puedes usar funciones start_table(), end_table(), table(), Tr() y td(). Para las dos primeras hay que indicarlas en el import del módulo.

Más información, en perldoc CGI.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con CGI::Application::Plugin::Authentication

Notapor explorer » 2009-07-15 19:02 @835

Perdón, creo que lo he entendido mal...

Creo que quieres meter este formulario dentro de una página HTML que ya existe.

Hay dos soluciones básicas:
* La primera, es usar el sistema de SSI del servidor web. Esta es la solución más sencilla, pero depende de las facilidades disponibles del servidor web. En algunas ocasiones lo tienen bloqueado.

* Modificar el CGI para que sea él el que genere toda la página. Esta es la solución más moderna y profesional.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Incluir código generado en una página HTML

Notapor fjmn2001 » 2009-07-16 08:25 @392

Me parece muy bien la segunda opción de modificar el cgi. Muchas gracias... Espero poder lograrlo ya que soy nuevo usando Perl... apenas un mes... Cuando lo logre lo agrego acá.
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Re: Incluir código generado en una página HTML

Notapor explorer » 2009-07-16 08:33 @397

La mejor forma es usar un sistema de plantillas, como por ejemplo usando HTML::Template. O Text::Template.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Incluir código generado en una página HTML

Notapor fjmn2001 » 2009-07-16 08:44 @405

explorer escribiste:La mejor forma es usar un sistema de plantillas, como por ejemplo usando HTML::Template. O Text::Template.


Yo estoy utilizando, Template Toolkit...
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Re: Incluir código generado en una página HTML

Notapor fjmn2001 » 2009-07-16 11:05 @503

Logro hacer que cargue las plantillas pero no sé por qué razón no autentica el usuario; este es mi ejemplo y no funciona correctamente...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
package MinimalApp;
use base 'CGI::Application';
use strict;
use CGI::Application::Plugin::TT;
use CGI::Application::Plugin::Session;
use CGI::Application::Plugin::Authentication;
use CGI::Application::Plugin::AutoRunmode;

use Data::Dumper;



sub cgiapp_init {
 my $self    = shift;
 $self->authen->protected_runmodes(':all');
}


sub setup {
my $self = shift;
$self->start_mode('index');
$self->run_modes(
'index' => 'index',
'prin' => 'prin',
'logout' => 'logout'
                );
                               

$self->tt_config(TEMPLATE_OPTIONS => {INCLUDE_PATH => '/var/www/sga/template',POST_CHOMP   => 1}
       );

$self->authen->config (
       DRIVER => [ Generic => { test => '123' } ],
       STORE  => 'Session',
       LOGIN_SESSION_TIMEOUT => {IDLE_FOR => '1m',EVERY => '1d'},
       CREDENTIALS => ['usuario','contrasena','codigo'],
       LOGOUT_RUNMODE => 'logout',
       POST_LOGIN_RUNMODE => 'prin',
       LOGIN_RUNMODE => 'index'
                         );
}
MinimalApp->authen->protected_runmodes('prin');


sub processtmpl{
    my ($self,$tmplname) = @_;
    my $query = $self->query();
    my %params= (
    PROFILE => $self->session->param("profile"),
    BADLOGINS => $self->session->param("badlogins"),
    MYURL => $query->url()
            );
    return $self->tt_process($tmplname, \%params);
}

sub logout{
    my $self = shift;
#    $self->session_delete;
    $self->authen->logout();
    return $self->index();
}

sub index{
    my $self = shift;
    return $self->processtmpl('contenedor');
}

sub prin{
    my $self = shift;
   
    return $self->processtmpl('contenedor2');
}
1;    # Perl requires this at the end of all modules
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Explico un poco: en el template "contenedor" tiene un formulario que pide al usuario el login, contraseña y código que se genera automáticamente. Todo esto está listo pero cuando intento enlazarlo con CGI::Application::Plugin::Authentication simplemente no hace nada. Entra automáticamente a este módulo y no es la idea... no sé si me expliqué bien...
Sintáxis: (principal.pl) [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
use strict;
use warnings;
use Template;
use CGI;
use CGI qw/:standard/;

print CGI::header();

if ($ENV{REQUEST_METHOD} eq 'POST'){

my $q = new CGI;

my $usuario = $q->param('usuario');
my $contrasena = $q->param('contrasena');
my $codigo = $q->param('codigo');
my $ccrypt = crypt($contrasena,'aa');

my $file = 'contenedor2';
my $vars = {
   usuario => $usuario,
   contrasena => $ccrypt,
   codigo => $codigo,
   };

my $template = Template->new({
        INCLUDE_PATH =>'/var/www/sga/template',
        EVAL_PERL    =>1,
}) || die $Template::ERROR,"\n";

$template->process($file, $vars);
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674

Re: Incluir código generado en una página HTML

Notapor fjmn2001 » 2009-07-20 17:11 @758

Ya logré que me funcionara. El problema que tenía era que en mis template había un botón que llamaba a otro script de Perl. Lo que hice fue direccionarlo a la misma página y así me funcionó la autenticación.
fjmn2001
Perlero nuevo
Perlero nuevo
 
Mensajes: 29
Registrado: 2009-06-25 15:11 @674


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 24 invitados

cron