Class: CASServer::Authenticators::SQL
- Defined in:
- lib/casserver/authenticators/sql.rb
Overview
Authenticates against a plain SQL table.
This assumes that all of your users are stored in a table that has a ‘username’ column and a ‘password’ column. When the user logs in, CAS conects to the database and looks for a matching username/password in the users table. If a matching username and password is found, authentication is successful.
Any database backend supported by ActiveRecord can be used.
Config example:
authenticator:
class: CASServer::Authenticators::SQL
database:
adapter: mysql
database: some_database_with_users_table
username: root
password:
server: localhost
user_table: users
username_column: username
password_column: password
When replying to a CAS client’s validation request, the server will normally provide the client with the authenticated user’s username. However it is now possible for the server to provide the client with additional attributes. You can configure the SQL authenticator to provide data from additional columns in the users table by listing the names of the columns under the ‘extra_attributes’ option. Note though that this functionality is experimental. It should work with RubyCAS-Client, but may or may not work with other CAS clients.
For example, with this configuration, the ‘full_name’ and ‘access_level’ columns will be provided to your CAS clients along with the username:
authenticator:
class: CASServer::Authenticators::SQL
database:
adapter: mysql
database: some_database_with_users_table
user_table: users
username_column: username
password_column: password
extra_attributes: full_name, access_level
Direct Known Subclasses
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
Instance Method Details
#validate(credentials) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/casserver/authenticators/sql.rb', line 57 def validate(credentials) read_standard_credentials(credentials) raise CASServer::AuthenticatorError, "Cannot validate credentials because the authenticator hasn't yet been configured" unless @options user_model = establish_database_connection_if_necessary username_column = @options[:username_column] || 'username' password_column = @options[:password_column] || 'password' results = user_model.find(:all, :conditions => ["#{username_column} = ? AND #{password_column} = ?", @username, @password]) if results.size > 0 $LOG.warn("#{self.class}: Multiple matches found for user #{@username.inspect}") if results.size > 1 unless @options[:extra_attributes].blank? if results.size > 1 $LOG.warn("#{self.class}: Unable to extract extra_attributes because multiple matches were found for #{@username.inspect}") else user = results.first @extra_attributes = {} extra_attributes_to_extract.each do |col| @extra_attributes[col] = user.send(col) end if @extra_attributes.empty? $LOG.warn("#{self.class}: Did not read any extra_attributes for user #{@username.inspect} even though an :extra_attributes option was provided.") else $LOG.debug("#{self.class}: Read the following extra_attributes for user #{@username.inspect}: #{@extra_attributes.inspect}") end end end return true else return false end end |