取消 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 为真值或假值(例如 0
或 1
) ,而不是两个真值(例如 N
或 Y
)。上面的代码假设你修复了这个问题。
我目前有一个小脚本 运行 可以向客户端发送 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 为真值或假值(例如0
或1
) ,而不是两个真值(例如N
或Y
)。上面的代码假设你修复了这个问题。