如何在Catalyst :: Plugin :: Authentication :: DBI中使用复合密钥用户ID?

时间:2010-03-05 20:52:46

标签: perl authentication catalyst

如果用户uesrid符合域(即复合键),那么使Catalyst::Plugin::Authentication工作的最有效方法是什么?它是否支持此功能?我正在专门研究使用Catalyst::Plugin::Authentication::DBI,但如果它没有当前功能,我不反对分叉,修补,重新创建它。

我需要使用特定密码登录某个域名。似乎/ all / C:P:A模块依赖于简单的UserID / Password组合。其他例子和提示是受欢迎的。

2 个答案:

答案 0 :(得分:7)

  1. Catalyst :: Authentication :: Store :: DBIx :: Class支持在您喜欢的任何类型的密钥上查找用户,因为您提供的所有身份验证信息(指定的密码字段除外)都会被转换在数据库查询中,如果需要,可以$c->authenticate({ last_name => "Fred", favorite_color => "Blue" })

  2. 如果你写一个RealmStore,你可以想象的任何东西都是可能的,并且他们没有理由要复杂 - 只有实现一两种方法的类并继承其余的。你必须使用哪一个取决于你的应用程序正在做什么的细节 - 在一个领域覆盖find_user将是更容易的情况;写一个新的商店会稍微复杂一点。

答案 1 :(得分:-2)

真正的答案是Catalyst::Plugin::Authentication需要from_sessionfor_userhandle only serialized keysfor_user返回序列化密钥,from_session返回用户。这会产生问题,因为C:P:A:DBI目前不允许多关键用户参与其角色实施或from_sessionfor_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

获得