取消 401 后的 Perl CGI 重定向

Perl CGI redirect after cancelling on a 401

我目前有一个小脚本 运行 可以向客户端发送 401,一旦取消并且不提供用户详细信息,该脚本将 return 什么也没有。

我想发送重定向到他们来自的页面。

主子程序如下所示;

#!usr/bin/perl
use strict;
use CGI;

sub checkAuth {
  my ($user, $pass) = &getAuthUsers(); # Get the user and pass of already authenticated users.
  unless ($user) {
    &sendAuthenticationHeader(); # Send 401
  }

  # Check user against DB and return 1 for success.
  if ( &checkUser($user, $pass) eq 'Y') { return 1 };
  else { # This is the redirect I'm trying to issue.
    my $cgi = CGI->new();
    print $cgi->redirect($ENV{HTTP_REFERER}); # Redirect to the referer url
    exit;
  }
}

不幸的是,每当我尝试发送新的 headers 它只是以纯文本形式收到。

感谢任何帮助,提前致谢。

sendAuthenticationHeader() 发出带有 401 状态码的 header。

print $cgi->redirect($ENV{HTTP_REFERER}); 发出带有 302 状态码的 header。当然,由于您已经发出 header,因此它会被视为 body.

如果您想重定向,return 401 毫无意义。将您的代码更改为

sub checkAuth {
  my ($user, $pass) = getAuthUsers();

  if (!$user || !checkUser($user, $pass)) {
    print CGI::redirect($ENV{HTTP_REFERER});
    exit;
  }
}

备注:

  • 删除了不正确的 &。不要告诉 Perl 忽略 sub 的原型。如果需要,请解决根本问题。
  • checkUser 的 return 值是布尔值,因此它应该 return 为真值或假值(例如 01) ,而不是两个真值(例如 NY)。上面的代码假设你修复了这个问题。