Ruby on rails 如何使用带有多字段的rubycas服务器对用户进行身份验证?

Ruby on rails 如何使用带有多字段的rubycas服务器对用户进行身份验证?,ruby-on-rails,ruby,single-sign-on,rubycas-server,Ruby On Rails,Ruby,Single Sign On,Rubycas Server,我曾经构建过一个sso系统,使用Desive来完成用户的系统,但现在我的问题是,只有一个字段像“email”,我想使用“email”/“tel”/“昵称”进行用户登录。中没有更多信息 对不起,我的英语很差!帮帮我,非常感谢 我很惊讶这是不可能的。从官方文件中可以看出,此验证器仅将给定的列名与用户名匹配: def matching_users results = user_model.find(:all, :conditions => ["#{username_column} =

我曾经构建过一个sso系统,使用Desive来完成用户的系统,但现在我的问题是,只有一个字段像“email”,我想使用“email”/“tel”/“昵称”进行用户登录。中没有更多信息


对不起,我的英语很差!帮帮我,非常感谢

我很惊讶这是不可能的。从官方文件中可以看出,此验证器仅将给定的列名与用户名匹配:

  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

对于您的情况,最好是编写与
电子邮件/tel/昵称
匹配的自定义验证器。然而,这是一个非常困难的登录名,请考虑一些更友好的用户。

< P>在RujyCAS/LIB/CASServer/AudioCuths/SqLyBCRIPT中修改以下代码。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


我会说,克隆repo,编写自己的包装器,并在这个应用程序中实现它。如果可能的话,如果您想帮助社区使用您的功能,请尝试创建一个请求。我检查了他们的系统,没有找到任何解决多个登录密钥的方法。我可以看看,如果可能的话,我会给你写一个包装纸。但是我怕如果我有那么多时间!我也在想同样的事情。也许,在发送到SSO端之前,可以在客户端应用程序中查找用户。我相信这会更有意义。这种事情应该只在客户端处理。SSO部分应该只关心身份验证。从我的理解来看,你的答案应该是正确的。
  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
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