2011-01-24 26 views
5

tengo el "Páginas" controlador con el "muestran" método y "auths" controlador con el método de "cheque" que devuelve 1 si se autentica el usuario. Tengo la página "predeterminada" ("/profile").necesita ayuda con el enrutamiento en Mojolicious

Necesito redireccionar a/si el usuario está autenticado y redirigir todas las páginas a/con el formulario de autorización si el usuario no está autenticado. Mi código no quiere que funcione correctamente (autenticación basada en la aplicación FastNotes ejemplo): (

auths # create_form - plantilla HTML con el formulario de autorización

$r->route('/')  ->to('auths#create_form') ->name('auths_create_form'); 
    $r->route('/login')  ->to('auths#create') ->name('auths_create'); 
    $r->route('/logout')  ->to('auths#delete') ->name('auths_delete'); 
    $r->route('/signup') ->via('get') ->to('users#create_form') ->name('users_create_form'); 
    $r->route('/signup') ->via('post') ->to('users#create') ->name('users_create'); 
    #$r->route('/profile') ->via('get') ->to('pages#show', id => 'profile') ->name('pages_profile'); 

    my $rn = $r->bridge('/')->to('auths#check'); 
    $rn->route  ->to('pages#show', id => 'profile') ->name('pages_profile'); 

$rn->route('/core/:controller/:action/:id') 
    ->to(controller => 'pages', 
    action => 'show', 
    id => 'profile') 
    ->name('pages_profile'); 

# Route to the default page controller 
$r->route('/(*id)')->to('pages#show')->name('pages_show'); 
+3

¿Podría explicar qué significa "no quiere funcionar correctamente"? Usted ha explicado lo que debería hacer, pero no lo que realmente sucede. – mfontani

+0

¿Estás seguro de que check() devuelve verdadero cuando se supone que debe hacerlo? –

Respuesta

11

Parece que desea / para rendir bien. un inicio de sesión forma o un perfil página. El código anterior mostrará siempre como /entrada porque golpea esa condición primera ruta y nunca le importará si está autenticado o no.

Pruebe un interruptor en su ruta inicial para / (su ruta predeterminada después de que el puente sea innecesario).

my $r = $self->routes; 
$r->get('/' => sub { 
    my $self = shift; 
    # Check whatever you set during authentication 
    my $template = $self->session('user') ? '/profile' : '/login'; 
    $self->render(template => $template); 
}); 

Un par de notas en el ejemplo:

  • es mucho más fácil para ayudar a depurar problemas si utiliza Mojolicious :: Lite para ejemplos.
  • Intente utilizar under en lugar de bridge.
  • Trate de usar $ r-> get (..) en lugar de $ r-> ruta (..) -> a través de (..)

Espero que esto ayude.

Cuestiones relacionadas