2012-11-22 30 views
2

以下适当格式的渲染错误我有一个under语句可能会产生错误(例如,验证错误)。我全面使用内容协商,并且我想以适当的格式返回under中的错误。示例代码:Mojolicious :: Lite

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; 
} 

我可以使用renderunder,但respond_to将无法​​正常工作。可能under为此工作。但在那种情况下,我应该怎么做?

回答

1

Galileo我有一个auth_fail助手,它做了这样的事情。虽然我制定了一个示例,请参阅该代码(以及if_authorif_adminunder)。

好的这里是一个例子,诀窍原来是(至少对于这种机制),然后您可以重定向到您的失败处理程序,您需要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;