【发布时间】:2015-04-09 20:10:36
【问题描述】:
我试图在我的 Mojolicious 应用程序中摆脱基本身份验证。我能够检测到会话密钥的缺失并重定向到登录页面。然后登录页面发布到我的应用程序,我向后端进程进行身份验证。该后端进程返回成功,然后我的 mojo 应用程序设置会话如下:
$self->session( user => $name, groups => $groups );
在调试时,$name 和 $group 都已定义且有效。然后我希望重定向到我的应用程序的“受保护”空间。重定向位于正确的位置,但未能检测到 $self->session('user') (调试时为 undef)我最终重定向回重复登录。
我将在下面包含设置的 sn-ps。我错过了什么?
MyApp.pm
my $r = $self->routes;
$r->route('/verify')->via('post')->to('util-auth#verify')->name('verify');
$r->route('/login')->via('get')->to('util-auth#login')->name('login');
my $app = $r->under('/myapp')->to('util-auth#check');
$app->route('/foo')->via('get')->to('controller-api#foo')->name('foo');
MyApp::Util::Auth
sub verify {
my $self = shift;
my $name = $self->param('username');
my $pass = $self->param('password');
my $dest = "/myapp/foo"; # in the protected area
if ( $self->authenticate($name, $pass) ) {
my $groups = $self->get_groups($name);
$self->session(
user => $name,
groups => $groups,
);
}
else {
$self->flash( message => "invalid login..." );
}
$self->redirect_to($dest);
}
sub login {
my $self = shift;
$self->render(); # renders the login form
}
sub check {
my $self = shift;
my $user = $self->session('user');
return 1 if defined $user;
$self->redirect_to('/login');
return 0;
}
【问题讨论】:
-
不一定,另外我想了解为什么这不起作用。对我来说最大的谜团是为什么会话 cookie 在重定向后不可用。
-
您找到答案了吗?我现在处于同样的境地。在正确的“$self->authenticate”之后,会话具有正确的“auth_data”值,但在重定向或加载另一个页面之后,该值从会话中消失了。
标签: perl session authentication mojolicious