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');
}
});
而且工作得很好。但是,我仍然好奇,如果可以根據狀態爲給定路線設置不同的控制器/操作。