3

Mojolicious アプリケーション モジュールに次のコードがあります。Test::Mojo $t->post_ok('hosts', encode_json( $json_string ) )->status_is(200) を使用してこれを実行すると、アプリケーションは正常に動作します。Firefox レスト クライアントを使用すると、add_condition ルート修飾子 'access' が渡されません。$can の結果を (add_condition ブロックで) ダンプしたところ、'1' です。したがって、私の考えでは、それはコントローラーに続く必要があります (テストを実行するときと同様)。FF レスト クライアントを使用している場合、アクセス条件が 1 を返した後に何も起こらないため、これは 404 を返します。

これら 2 つの状況でアプリケーションの動作が異なる理由は何ですか?

$self->plugin(
    'json_rpc_dispatcher',
    services => {
        '/auth'      => Package::Controller::Auth->new,
        '/user'      => Package::Controller::User->new,
        '/hosts'     => Package::Controller::Hosts->new,
    }   
);  

$self->app->routes->add_condition(
    access => sub {
        my ($rt, $cntrlr, $stuff) = @_; 
        my $sess = $cntrlr->stash('mojo.session');

        my $path = $cntrlr->req->url->path->parts;

        my $can = $self->can_access({ 
            route => $path->[0],
            args  => $sess,
        }); 

        $can && return 1;


        $cntrlr->render_json({
            error => 'Not Authorized',
            ok    => 0,
        }); 
    }   
); 

$self->hook( before_dispatch => sub {

    my $this = shift;

    my $params = $this->tx->req->json;

    if( !$this->session('auth') ) {
    my $login = $self->login({
            user     => $params->{params}{user},
            password => $params->{params}{password},
    });

        return { error => 'Invalid Username or password' } if $login->{error}; 
        my $access = $self->has_access( 
            $params->{params}{user}, $params->{params}{password}
        );

        return { error => 'Invalid credentials' } unless keys %{ $access };

        $this->session( auth => { dn => $params->{params}{user}, perms => $access } );

    }

    else {
        $r->find('auth' )->over('access');
        $r->find('user' )->over('access');
        $r->find('hosts')->over('access');
    }

} );  # hook
4

1 に答える 1

0

ごめん。この問題は、アプリケーションや Mojolicious とは何の関係もありませんでした (さらに言えば、perl でさえも)。ホスト名が正しく解決されませんでした。

うーん、どこに問題があるのか​​わからない。morbo script/app daemon -l my.host.name.domain.com を使用してサーバーを起動しても機能しませんでした。

morbo script/app daemon -l 192.168.1.11 を使用した場合 (192.168.1.11 は my.host.name.domain.com の IP です)。物事は期待通りに動き始めました。

そして今、それらのどちらも機能しません。:(

于 2012-06-15T19:40:30.300 に答える