在Mojolicious方面需要帮助

时间:2011-01-24 12:56:58

标签: perl authentication routing mojolicious

我的“页面”控制器带有“显示”方法,“ Auths ”控制器带有“检查< / strong>“如果用户通过身份验证,则返回1的方法。 我有“默认”页面(“ / profile ”)。

如果用户未经过身份验证,我需要重定向到/如果用户已通过身份验证,并将所有页面重定向到/使用授权表单。我的代码不想正常工作(基于FastNotes示例应用程序的auth):(

使用授权表格验证#create_form - html-template。

    $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');

1 个答案:

答案 0 :(得分:11)

您似乎希望/呈现登录表格 个人资料页面。上面的代码将始终将/显示为登录,因为它首先会触及该路由条件,并且无论您是否经过身份验证都无关紧。

/的初始路线中尝试切换(不需要桥接后的默认路线)。

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 );
});

关于你的例子的几点说明:

  • 如果您使用Mojolicious :: Lite作为示例,则更容易帮助调试问题。
  • 尝试使用under代替bridge
  • 尝试使用$ r-&gt; get(..)代替$ r-&gt; route(..) - &gt; via(..)

希望这有帮助。