【问题标题】:How do I use composite key user ids with Catalyst::Plugin:: Authentication::DBI?如何在 Catalyst::Plugin:: Authentication::DBI 中使用复合密钥用户 ID?
【发布时间】:2011-01-24 07:03:58
【问题描述】:

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

我需要用某个密码登录某个域名。似乎 /all/ C:P:A 模块依赖于简单的用户 ID / 密码组合。欢迎提供其他示例和提示。

【问题讨论】:

    标签: perl authentication catalyst


    【解决方案1】:
    1. Catalyst::Authentication::Store::DBIx::Class 支持在您喜欢的任何类型的密钥上查找用户,因为您提供的所有身份验证信息(指定的密码字段除外)都已打开进入数据库查询,您可以根据需要执行$c->authenticate({ last_name => "Fred", favorite_color => "Blue" })

    2. 如果您编写 RealmStore,那么您可以想象的几乎任何事情都是可能的,而且它们没有理由变得复杂 - 只需实现一两个方法并继承其余方法的类.您必须使用哪一个取决于您的应用程序正在执行的操作的详细信息——在领域中覆盖find_user 会更容易;编写一个新的 Store 会稍微复杂一些。

    【讨论】:

      【解决方案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获得。

      【讨论】:

      • 在 Auth 中没有这样的假设,没有像 Catalyst::Plugin::Authentication::DBI 这样的模块,如果你在谈论 Catalyst::Authentication::Store::DBI 答案应该很明显。 for_sessionfrom_session 只需相反即可。
      • 假设在 Store::DBI 中涉及用户在单个列上是唯一的,并且使用该单个列检索角色。很好地抓住了模块名称拼写错误。
      猜你喜欢
      • 2010-11-08
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多