- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以独立配置 :database_authenticatable
或 :ldap_authenticatable
;第一个针对我的 Rails SQLite 开发数据库进行身份验证,另一个针对我公司的 LDAP/Active Directory 服务器进行身份验证。
我现在想做的是叠加两种身份验证。如果用户通过了数据库的身份验证,那很好;如果不是,则检查 LDAP(并最终创建用户)。我已经尝试了显而易见的:
devise :database_authenticatable, :ldap_authenticatable, :rememberable, :trackable
用户首先按预期对数据库进行身份验证:
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."login" = 'test@test.com' LIMIT 1
查询为用户“test@test.com”返回一行(忽略电子邮件字段差异的登录列)。问题是 devise
然后继续进行失败的 LDAP 身份验证。我如何告诉 devise
接受第一个成功的身份验证策略并就此停止?
最佳答案
我知道这是一个老问题,但它出现在 Google 搜索中,所以我会为可能找到它的其他人回答。
我认为不可能通过一种用户模型进行两种类型的身份验证。我的做法是在用户模型上使用单表继承。
class User < ActiveRecord::Base
end
class LdapUser < User
devise :ldap_authenticatable, :rememberable, :trackable
end
class LocalUser < User
devise :database_authenticatable, :registerable, :confirmable, :recoverable, :trackable
end
只有 User
是在数据库中创建的,但它是用两个继承模型中存在的所有字段创建的。它还需要一个额外的列 type
,它是一个字符串。这允许 Rails/ActiveRecord 推断模型和继承结构,并使其全部正常工作。
在此之后,您可以设置 Devise 以提供每个模型所需的路由。然而,这会导致有两个登录表单。用户不必知道他们到底是什么类型的用户,因此最好将这些组合到一个系统中。
我之前问过一个关于这个的问题,但最终设法找到了解决方案,所以我建议阅读我对这个问题的回答:https://stackoverflow.com/a/21175515/166210
关于ruby-on-rails - 使用设计堆叠 database_authenticatable 和 ldap_authenticatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12144533/
我可以独立配置 :database_authenticatable 或 :ldap_authenticatable;第一个针对我的 Rails SQLite 开发数据库进行身份验证,另一个针对我公司的
undefined method database_authenticatable' for # 迁移是: class DeviseCreateUsers false t.recover
我在基于测验的小型应用程序中使用 Active Admin gem。但是当我执行 耙数据库:迁移它给了我错误。以下是该命令的跟踪: $ rake db:migrate RAILS_ENV=produc
我是一名优秀的程序员,十分优秀!