2

我有一个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为此工作。但在那种情况下,我该怎么办?

4

1 回答 1

1

伽利略中,我有一个auth_fail助手可以做这样的事情。当我制定一个示例时,请查看该代码(以及if_authorand if_admin unders)。

好的,这是一个例子,在你可以重定向到你的失败处理程序之前,这个技巧被证明是(至少对于这个机制),你需要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;
于 2012-11-22T13:20:12.677 回答