4
我使用Mojolicious :: Plugin :: Authentication来处理我的应用中的身份验证。我试图设置斜线路径'/',如果通过身份验证,将会有一个控制器/动作,如果不是,则另一个控制器/动作(即,根据您是否通过身份验证,您会转到其他页面)。我不确定如何去实现这一点。下面是一些我尝试过的事情:Mojolicious动态路由动作取决于状态
$r->any('/')->to(cb => sub {
my $self = shift;
if ($self->is_user_authenticated) {
$self->redirect_to('member#index');
}
else {
$self->redirect_to('guest#index');
}
});
而且......
my $logged_in = $r->under (sub {
my $self = shift;
if (!$self->session("username")) {
return undef;
}
else {
return 1;
}
});
if ($logged_in) {
$logged_in->get('/')-to(controller => 'Member', action => 'index');
}
else {
$r->get('/')->to(controller => 'Guest', action => 'index');
}
我没有使用Mojolicious ::插件::验证。我可以轻松设置会话令牌并自行检查。无论哪种方式,问题依然存在:如何为给定路线创建动态操作?
附录
忘了补充,我也试过这样:
my $auth = $r->under('/' => sub {
my $self = shift;
# Authenticated
return 1 if $self->is_user_authenticated;
# Not authenticated
return undef;
});
$auth->get('/')->to('member#index');
# Routes related to non-members
$r->get('/')->to('guest#index');
添加另一个细节
我只是想补充一点,我可以渲染或redirect_to的东西不同的基于开状态,例如,
$r->any('/')->to(cb => sub {
my $self = shift;
if ($self->is_user_authenticated) {
$self->render('member/index');
}
else {
$self->render('guest/login');
}
});
而且工作得很好。但是,我仍然好奇,如果可以根据状态为给定路线设置不同的控制器/操作。