gpt4 book ai didi

perl - 使用多个驱动程序的 CGI 应用程序身份验证

转载 作者:行者123 更新时间:2023-12-04 21:25:57 25 4
gpt4 key购买 nike

我一直在尝试通过 2 个驱动程序验证我的 CGI 应用程序,一个使用存储在数据库中的用户名/密码,另一个使用 ldap 事件目录。

以下是代码

$self->authen->config( 
DRIVER => [ 'DBI',
DBH => $self->dbh,
TABLE => 'user',
CONSTRAINTS => {
'user.username' => '__CREDENTIAL_1__',
'MD5:user.password' => '__CREDENTIAL_2__'
},
],

DRIVER => [ 'Authen::Simple::LDAP',
host => 'ldapad.company.com',
basedn => 'OU=XXX,OU=XX,DC=XXX,DC=XXX',
binddn => 'CN=usename,OU=Users,OU=XXX,OU=AD,DC=XXX,DC=xxx',
bindpw => 'secret',
filter => '(cn=%s)',
],


CREDENTIALS => [ 'authen_username', 'authen_password' ],
STORE => 'Session',
LOGOUT_RUNMODE => 'logout',
LOGIN_RUNMODE => 'login',
POST_LOGIN_RUNMODE => 'okay',
RENDER_LOGIN => \&my_login_form,
);

如何使应用程序检查另一个驱动程序未通过其中一个进行身份验证。
现在,正如预期的那样,它在底部列出的驱动程序有效,而且它们都有效,具体取决于最后分配的驱动程序。

最佳答案

我假设您正在使用 CGI::Application::Plugin::Authentication .
我认为您的代码中有一个小问题,这证明了只有最后一个有效的事实。

你的代码是这样的:

$self->authen->配置(
驱动程序=> ['DBI',...],
驱动程序 => ['Authen::Simple::LDAP', ... ],
CREDENTIALS => ['authen_username', 'authen_password'],
存储 => ' session ',
# ...
);

但是 $self->authen->config()需要一个哈希。例如,看看 this example from the C::A::P::Authentication分配。

作为一个哈希,这意味着最后一个 DRIVER条目将覆盖以前的条目。
我相信修复非常简单:

$self->authen->配置(
司机 => [
['DBI',...],
['Authen::Simple::LDAP', ... ],
],
CREDENTIALS => ['authen_username', 'authen_password'],
存储 => ' session ',
# ...
);

您可以在模块文档中找到这样的示例:

http://search.cpan.org/~silasmonk/CGI-Application-Plugin-Authentication/lib/CGI/Application/Plugin/Authentication.pm#config

关于perl - 使用多个驱动程序的 CGI 应用程序身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3119567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com