2012-11-22 27 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;