我使用rubycas服务器构建了一个sso系统,使用devise来完成用户的系统,但现在我的问题是,rubycas服务器只有一个字段像'email‘,我想使用'email’/ 'tel‘/’昵称‘来登录用户。维基中没有更多的信息
authenticator:
class: CASServer::Authenticators::SQLBcrypt
database:
adapter: mysql2
database: xxxx
username: root
password: xxxx
host: localhost
user_table: users
username_column: email # tel/nickname
password_column: encrypted_password为我糟糕的英语感到抱歉!帮帮我,非常感谢!
发布于 2015-01-26 07:00:53
在rubycas-server/lib/casserver/authenticators/sql_bcrypt.rb中修改以下代码
def matching_users
results = user_model.find(:all, :conditions => ["#{username_column} = ?", @username])
results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
end至
def matching_users
if username_column.include?(',')
columns = username_column.split(',')
sql = ''
conditions = []
columns.each do |field|
if sql.length != 0
sql += ' or '
end
sql += "#{field} = ?"
conditions << @username
end
conditions.unshift(sql)
else
conditions = ["#{username_column} = ?", @username]
end
results = user_model.find(:all, :conditions => conditions)
results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
end然后,您可以在config.yml中使用mutli,如下所示:
authenticator:
class: CASServer::Authenticators::SQLBcrypt
database:
adapter: mysql2
database: test
username: root
password: map
host: localhost
user_table: users
username_column: email,nickname,tel
password_column: encrypted_password发布于 2014-11-12 10:08:04
我想这是不可能的。在官方的存储库中可以看到,这个身份验证器只匹配给定的列名和用户名:
def matching_users
results = user_model.find(:all, :conditions => ["#{username_column} = ?", @username])
results.select { |user| BCrypt::Password.new(user.send(password_column.to_sym)) == @password }
end对于您的情况,最好的方法是编写与email/tel/nickname匹配的自定义身份验证器。这是非常困难的登录名称,尽管,考虑一些更友好的用户。
https://stackoverflow.com/questions/26837521
复制相似问题