perl - 为什么在使用 MojoX::JSON::RPC::Service 时我的 Mojo 测试与 FF rest 客户端的工作方式不同?

标签 perl json-rpc mojolicious

我的 Mojolicious 应用程序模块中有以下代码。当我使用 Test::Mojo $t->post_ok('hosts', encode_json( $json_string ) )->status_is(200),应用程序工作正常。当我使用 Firefox 休息客户端时,我从来没有通过 add_condition 路由修饰符 'access'。我转储了 $can 的结果(在 add_condition block 中),它是“1”。因此,在我看来,这应该继续到 Controller (就像我运行测试时所做的那样)。使用 FF rest 客户端时 返回 404,因为访问条件返回 1 后没有任何反应。

知道为什么应用程序在这两种情况下的运行方式不同吗?

$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

最佳答案

对不起。无论如何,这个问题与应用程序或 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)。事情开始按预期运行。

现在这些都不起作用。 :(

关于perl - 为什么在使用 MojoX::JSON::RPC::Service 时我的 Mojo 测试与 FF rest 客户端的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052411/

相关文章:

linux - 如何在 Perl 中使用 Image::Magic 增加特定像素的 RGB 值?

java - jython 中的 SSL 非法状态异常

javascript - Mojo::UserAgent 和 JavaScript

regex - 如何从 Perl 字符串中删除特定字符?

perl - 如何使用命令行获取whois信息?

Perl 映射/grep 内存泄漏

python - 类型错误 : 'Response' object has no attribute '__getitem__'

erlang - 将路径添加到 Erlang 搜索路径?

perl - 自定义 404 路由与网站根目录不匹配

perl - Module::Build 测试在不同系统的不同目录中查找