如果用户uesrid符合域(即复合键),那么使Catalyst::Plugin::Authentication
工作的最有效方法是什么?它是否支持此功能?我正在专门研究使用Catalyst::Plugin::Authentication::DBI
,但如果它没有当前功能,我不反对分叉,修补,重新创建它。
我需要使用特定密码登录某个域名。似乎/ all / C:P:A
模块依赖于简单的UserID / Password组合。其他例子和提示是受欢迎的。
答案 0 :(得分:7)
Catalyst :: Authentication :: Store :: DBIx :: Class支持在您喜欢的任何类型的密钥上查找用户,因为您提供的所有身份验证信息(指定的密码字段除外)都会被转换在数据库查询中,如果需要,可以$c->authenticate({ last_name => "Fred", favorite_color => "Blue" })
。
如果你写一个Realm或Store,你可以想象的任何东西都是可能的,并且他们没有理由要复杂 - 只有实现一两种方法的类并继承其余的。你必须使用哪一个取决于你的应用程序正在做什么的细节 - 在一个领域覆盖find_user
将是更容易的情况;写一个新的商店会稍微复杂一点。
答案 1 :(得分:-2)
真正的答案是Catalyst::Plugin::Authentication
需要from_session
和for_user
至handle only serialized keys:for_user
返回序列化密钥,from_session
返回用户。这会产生问题,因为C:P:A:DBI
目前不允许多关键用户参与其角色实施或from_session
和for_user
实施。奇怪的是,它确实允许在find_user中的用户检索中使用复杂的键值条件。目前,退回是一个不好的假设,所有用户都使用uid / guid / pkid等进行识别。
为了使用复合键标识用户,查询条件必须附加到商店,或者缓存在for_user
序列化键中。这两种方法都可以使用补丁。
奇怪的是,我上次遇到同样的困惑I created an LDAP store 3 years ago。
我会保持这个问题的开放,直到我修补它,分叉它,或者有人给Catalyst::Plugin:: Authentication::Store::DBI
提供有用的适用建议。我已经重写了这个模块,它可以在http://github.com/EvanCarroll/Catalyst-Authentication-Store-DBI