以编程方式访问Rails中的Devise LDAP配置

时间:2015-03-03 22:26:26

标签: ruby-on-rails-4 devise ldap

我在Rails 4应用程序中使用Devise和LDAP身份验证。 ldap.yml看起来像

development:
  host: my.ldap.server
  port: 636
  attribute: sAMAccountName
  base: OU=Accounts,DC=my,DC=ldap,DC=server
  admin_user: CN=ServiceAccount,OU=LDAP,OU=Service Accounts,DC=my,DC=ldap,DC=server
  admin_password: super_secret_password
  ssl: true

production:
  ...

我希望能够以编程方式访问此功能,但我无法弄清楚如何执行此操作。我可以通过

直接从文件中读取来访问
  

ldap_config = YAML.load(ERB.new(File.read(::Devise.ldap_config || "#{Rails.root}/config/ldap.yml")).result)[Rails.env]

然而,这并非100%准确,因为如果文件中的值在没有重新启动Rails服务器的情况下发生了变化,那么" live" Rails实际使用的值会有所不同。

我怎样才能到达这些"生活"值?我无能为力。

1 个答案:

答案 0 :(得分:1)

您可以使用以下方式访问配置:

> Devise::LDAP::Connection.new.ldap
=> #<Net::LDAP:0x0000010e9d2da8
 @auth={:method=>:anonymous},
 @base="OU=Accounts,DC=my,DC=ldap,DC=server",
 @encryption={:method=>:simple_tls},
 @force_no_page=false,
 @host="my.ldap.server",
 @open_connection=nil,
 @port=636,
 @verbose=false>

> Devise::LDAP::Connection.new.ldap.host
=> "my.ldap.server"
> Devise::LDAP::Connection.new.ldap.port
=> 636
...
> 

就像我说的那样,我没有像你写的那样直接阅读文件。如果您更改ldap.yml,则需要重新启动服务器以查看LDAP配置中的更改!如果您愿意,可以设置如下的初始值设定项:

# config/initializers/ldap.rb
LDAP_CONFIG = YAML.load(ERB.new(File.read("#{Rails.root}/config/ldap.yml")).result)[Rails.env].with_indifferent_access

然后在你的代码中:

LDAP_CONFIG[:admin_user] #=> "CN=ServiceAccount,OU=LDAP,OU=Service Accounts,DC=my,DC=ldap,DC=server"
LDAP_CONFIG[:admin_password] #=> "super_secret_password"
LDAP_CONFIG[:host] #=> "my.ldap.server"