如何在rails中使用rubycas-server对用户进行身份验证?

时间:2014-10-15 11:20:50

标签: ruby-on-rails ruby postgresql devise rubycas-server

我正在使用rubycas-server GEM作为我的CAS服务器。此CAS服务器正在检查来自不同数据库的用户表的用户凭据。这些用户是使用Devise gem创建的。 Devise以加密形式将每个用户的密码保存在数据库表中。因此,在此rubycas-server的配置文件中包含authenticator部分,其代码如下:

authenticator:
 class: CASServer::Authenticators::SQL
 database:
   adapter: postgresql
   database: testdb
   username: postgres
   password: root
   host: localhost
   pool: 5
 user_table: users
 username_column: email
 password_column: encrypted_password
 encrypt_function: <encryption function>

如上面最后一行代码所述,encrypted_function包含检查凭据的算法。一些样本在URL中被赋予gelow

https://code.google.com/p/rubycas-server/wiki/UsingTheSQLEncryptedAuthenticator

但我找不到适合devise的内容。请帮忙。

1 个答案:

答案 0 :(得分:2)

最后我得到了我的问题的解决方案。实际上,身份验证器设置中不需要encrypt_function:。由于我使用由Devise生成的电子邮件和encrypted_pa​​ssword来检查用户的凭据,因此最终验证者是:

authenticator:
  class: CASServer::Authenticators::SQLBcrypt
  database:
   adapter: postgresql
   database: testdb
   username: postgres
   password: root
   host: localhost
   pool: 5
  user_table: users
  username_column: email
  password_column: encrypted_password

默认情况下,设计用户BCrypt会加密密码,这就是我使用CASServer::Authenticators::SQLBcrypt课程的原因。但rubycas-server gem默认情况下不设置SQLBcrypt个配置。所以转到lib/casserver/authenticators/authlogic_crypto_providers路径并打开brypt.rb文件。在此文件中,您可以看到这些行被注释,因此取消注释它们或如果不存在则添加它们

    acts_as_authentic do |c|
     c.crypto_provider = Authlogic::CryptoProviders::BCrypt
    end

然后在终端中运行gem install bcrypt-ruby或将此GEM添加到rubycas-server GEMFILE并重新启动服务器。我认为这应该有用。