我使用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 中给出的一些示例
https://code.google.com/p/rubycas-server/wiki/UsingTheSQLEncryptedAuthenticator
但我找不到什么适合devise
。请帮忙。
我终于找到了问题的答案。实际上,在验证器设置中不需要encrypt_function:
。当我使用电子邮件和Devise
生成的encrypted_password来检查用户的凭据时,最终的验证器是:
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
作为Devise用户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并重新启动服务器。我认为这应该奏效。