我们使用自定义身份验证器控制器、自定义用户类 (MyApp::Core::User) 和几个领域:
package MyApp::Controller::Auth;
...
sub surrogate : Local {
my ( $self, $c ) = @_;
my $p = $c->req->params;
my $actual_user = $c->user; # save it for later
try {
$c->authenticate({ id=>$p->{surrogate_id} }, 'none');
$c->session->{user} = new MyApp::Core::User(
active_user => $actual_user,
effective_user => $c->user );
$c->stash->{json} = { success => \1, msg => "Login Ok" };
} catch {
$c->stash->{json} = { success => \0, msg => "Invalid User" };
};
$c->forward('View::JSON');
}
在myapp.conf
我使用这样的东西:
<authentication>
default_realm ldap
<realms>
<ldap>
# ldap realm config stuff here
</local>
<none>
<credential>
class Password
password_field password
password_type none
</credential>
<store>
class Null
</store>
</none>
</realms>
</authentication>
这样我们就创建了一个普通的 Catalyst 用户对象,但是将它包装在我们的自定义用户类周围以获得更多控制。我可能已经创建了一个专门的代理领域,但我选择使用我自己的用户类。它是在不久前完成的,我记得我们为什么这样做。