我有一个under
语句,可能会生成错误(例如,身份验证错误)。我全面使用内容协商,我想以适当的格式返回under
内的错误。示例代码:
under sub {
my $self = shift;
# Authenticated
my $token = $self->param('token') || '';
return 1 if $token eq '123456';
# Not authenticated
$self->respond_to(
json => {
json => { error => 'Invalid authentication token.' },
status => 401
},
text => {
text => 'Unauthorized.',
status => 401
}
);
return undef;
}
我可以在render
内使用under
,但respond_to
将不起作用。可能under
可以为此工作。但在那种情况下,我该怎么办?
答案 0 :(得分:1)
在Galileo我有一个auth_fail
帮助器,它可以做到这一点。在制作示例时,请查看该代码(以及if_author
和if_admin
under
)。
这里有一个例子,在您可以重定向到失败处理程序之前,结果是(至少对于此机制),您需要flash
格式,这使得它可用于下一个处理程序
#!/usr/bin/env perl
use Mojolicious::Lite;
any '/fail' => sub {
my $self = shift;
$self->respond_to(
json => {
json => { error => 'Invalid authentication token.' },
status => 401
},
text => {
text => 'Unauthorized.',
status => 401
}
);
};
under sub {
my $self = shift;
# Authenticated
my $token = $self->param('token') || '';
return 1 if $token eq '123456';
# Not authenticated
$self->flash( format => $self->param('format') );
$self->redirect_to('fail');
return undef;
};
any '/private' => sub {
my $self = shift;
$self->respond_to(
json => {
json => { launch_codes => '9999999' },
},
text => {
text => 'Launch Code: 9999999',
}
);
};
app->start;