5

「 show」メソッドを使用した「Pages」コントローラーと、ユーザーが認証された場合に 1 を返す「 check 」メソッドを使用した「 Auths」コントローラーがあります。「デフォルト」ページ (「/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');
4

1 に答える 1

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->route(..)->via(..) の代わりに $r->get(..) を使用してみてください

お役に立てれば。

于 2011-02-24T09:18:11.283 に答える