Нужна помощь с маршрутизацией в Mojolicious - PullRequest
5 голосов
/ 24 января 2011

У меня есть контроллер " Pages " с методом " show " и контроллер " Auths " с " check "метод, который возвращает 1, если пользователь аутентифицирован.У меня есть страница по умолчанию (" / profile ").

Мне нужно перенаправить на /, если пользователь прошел проверку подлинности, и перенаправить все страницы в / с формой авторизации, если пользовательне аутентифицирован.Мой код не хочет работать должным образом (авторизация на основе примера приложения FastNotes): (

auths # create_form - html-шаблон с формой авторизации.

    $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 Ответ

11 голосов
/ 24 февраля 2011

Кажется, вы хотите, чтобы / отобразил логин форму ИЛИ профиль страницу. Приведенный выше код всегда будет показывать / как login , потому что он сначала выполняет это условие маршрута и никогда не будет заботиться о том, аутентифицированы вы или нет.

Попробуйте изменить исходный маршрут на / (маршрут по умолчанию после моста не нужен).

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-> get (..) вместо $ r-> route (..) -> via (..)

Надеюсь, это поможет.

...