Perl mojolicous、重定向、会话并尝试创建身份验证系统
我试图在我的mojolicous应用程序中摆脱基本身份验证。我能够检测到缺少会话密钥,并重定向到登录页面。然后登录页面发布到我的应用程序,我向后端进程进行身份验证。后端进程返回成功,然后我的mojo应用程序将会话设置为:Perl mojolicous、重定向、会话并尝试创建身份验证系统,perl,session,authentication,mojolicious,Perl,Session,Authentication,Mojolicious,我试图在我的mojolicous应用程序中摆脱基本身份验证。我能够检测到缺少会话密钥,并重定向到登录页面。然后登录页面发布到我的应用程序,我向后端进程进行身份验证。后端进程返回成功,然后我的mojo应用程序将会话设置为: $self->session( user => $name, groups => $groups ); 在调试过程中,$name和$group都已定义且有效。然后我希望重定向到我的应用程序的“受保护”空间。重定向到达正确的位置,但随后未能检测到$self->
$self->session( user => $name, groups => $groups );
在调试过程中,$name和$group都已定义且有效。然后我希望重定向到我的应用程序的“受保护”空间。重定向到达正确的位置,但随后未能检测到$self->session('user')(在调试时未定义)I最终重定向回登录
我将在下面包括设置的片段。我错过了什么
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->param('name')
和$self->param('pass')
请参见此处的工作示例:
使用起来并不容易,例如:?不一定,而且我想了解为什么这不起作用。对我来说最大的谜团是为什么重定向后会话cookie不可用。你找到答案了吗?我现在也处于同样的情况。在正确的“$self->authenticate”之后,会话具有正确的“auth_data”值,但在重定向或加载另一个页面后,该值将从会话中消失。您是正确的,我认为这就是我的代码中的值。。。对于这个例子,我只是打错了。我会看看你的要点,看看是否有什么不同。我也会编辑我的帖子。谢谢